Questo post vuole semplicemente essere un banale esempio di web-service esposto su un web server Tomcat, con l’obiettivo di utilizzare steps quanto più meccanici e semplici possibili.
Piccola digressione , un web service non è altro che un servizio esposto sul web , si parla di servizio, in quanto è un’applicazione software che offre ad altre applicazioni delle funzionalità. Queste sono interrogabili tramite protocollo HTTP/HTTPs il cui payload è una richiesta SOAP. Questa accede all’interfaccia dal nostro servizio rispettando delle regole , o come si suol dire un contratto, rappresentato in gergo dal WSDL che il nostro servizio espone su un ben preciso punto di accesso , chiamato end-point.
Jax-ws, inizialmente nato come progetto a se stante, è oggi integrato nella piattaforma J2EE come l’insieme delle interfacce (API) del linguaggio di programmazione Java dedicate allo sviluppo di servizi web. Di seguito la url per avere un riferimento ufficiale: https://docs.oracle.com/javaee/6/tutorial/doc/bnayn.html
Veniamo adesso al nostro esempio :
- Esegui il tuo Eclipse
- Crea un nuovo progetto Maven
- Inserire “maven-archetype-webapp” come filtro e selezionare la voce corrispondente
- Quindi inserire un groupID e artifactID
- Alla fine avremo creato il nostro progetto web maven vuoto
Se come nel mio caso riscontrate un problema di “Maven configuration Problem”. Probabilmente non state utilizzando la corretta versione di java . Nel mio caso dal pom si osserva :
Vado di conseguenza a modificare la versione di java tramite le preferences di Eclipse. Se questo non è ancora sufficiente a far scomparire i Maven Configuration Problem e se compare un errore del tipo :
org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)
allora è probabile che la versione di m2e di Eclipse sia obsoleta, rispetto al pom. Si potrebbe procedere aggiornando la versione di Eclipse oppure è possibile scaricare una versione più aggiornata del plugIn, ad esempio al seguente url :
https://otto.takari.io/content/sites/m2e.extras/m2eclipse-mavenarchiver/0.17.2/N/LATEST/
- A questo punto , possiamo cercare sul repository maven una delle ultime versioni disponibili, compatibile con la versione di java che stiamo utilizzando e copiamo le dipendenze da aggiungere al pom.xm
Nella mia situazione , probabilmente per via della versione un pò vecchia di Eclipse , occorre anche escludere il seguente path , altrimenti la build di Maven avverrà in maniera errata :
Alla fine, a livello di progetto Eclipse, arriverete alla seguente situazione :
- Adesso siamo pronti a creare la nostra prima interfaccia come segue :
Se vogliamo un web-service che può girare sul nostro web server, dobbiamo anche creare il file sun-jaxws.xml al seguente path /main/webapp/WEB-INF che fornisce le informazioni di end poit:
<endpoints xmlns=”http://java.sun.com/xml/ns/jax-ws/ri/runtime” version=”2.0″>
<endpoint name=”MyFirstWebService”
implementation=”demojaxws.MyFirstWebService”
url-pattern=”/myFirstWebService” ></endpoint>
</endpoints>
- Modifichiamo il file web.xml :
- Eseguite la maven build :
- A questo punto non ci resta altro che deployare il nostro web-service su Tomcat.
Io utilizzerò un Tomcat 7 e per comodità procederò alla creazione del server Tomact sotto Eclipse come segue :
Una volta pubblicato il servizio , eseguiamo lo start del nostro server ed accediamo al nostro web-server tramite il seguente puntamento :
http://localhost:8080/myJaxWS/myFirstWebService
Oppure possiamo accedere al wsdl per creare la nostra prima request tramite il seguente puntamento :
http://localhost:8080/myJaxWS/myFirstWebService?wsdl
Per semplicità io utilizzo un soap client come XmlSpy per creare la soap request , ma si potrebbe utilizzare un qualsiasi altro client , come ad esempio la versione free di SoapUI.
Nel caso del client da me utilizzato :
Specifico il wsdl del servizio
seleziono il metodo che il servizio espone
viene creata una richiesta standard (in questo caso XMLSpay, lo fa in automatico per voi , perchè è in grado di decifrare le regole del vostro wsdl)
quindi possiamo direttamente inviare la richiesta al web server come segue
Di seguito la request Soap e la corrispondente risposta che il servizio ci fornisce
Soap Request :
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <m:sayHello xmlns:m="http://demojaxws/"> <guestname xsi:type="xsd:string">Maurizio</guestname> </m:sayHello> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Soap Response :
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:sayHelloResponse xmlns:ns2="http://demojaxws/"> <return>Hello Maurizio</return> </ns2:sayHelloResponse> </S:Body> </S:Envelope>