JAX-WS Esempio di Web-Service step by step

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>