La versione 2.0 di Spring-ws introduce la dipendenza da Spring 3.0 e spinge verso l’uso delle annotation, lasciando il supporto deprecato delle classi che abbiamo imparato a conoscere nei precedenti articoli-
In questo articolo vedremo le nuove feature introdotte da Spring-ws.
Partiamo dalla creazione del progetto, che si avvale dei nuovi archetipi rilasciati da spring-ws e vediamo come creare il solito webservice per la libreria.
1 2 3 4 5 6 |
mvn archetype:create -DarchetypeGroupId=org.springframework.ws -DarchetypeArtifactId=spring-ws-archetype -DarchetypeVersion=2.0.2.RELEASE -DgroupId=it.finazzo -DartifactId=libreriaservice |
Con la direttiva indicata Spring-ws crea la directory libreriaservice
Spostiamoci all’interno della cartella e creaiamo la struttura per il nostro IDE tramite la direttiva mvn eclipse:eclipse. A questo punto possiamo importare il progetto in Eclipse. Come si può notare nel file xml associato al dispatchet spring-servlet.xml è stata esplicitata la dipendenza dalle annotation, tramite il tag <sws:annotation-driven/>
Recuperiamo lo schema xsd che abbiamo creato nei precedenti articoli e lo copiamo sotto la cartella resources.
Definiamo il bean che si occupa della generazione del wsdl tramite il seguente tag
1 2 3 4 5 6 7 |
<sws:dynamic-wsdl id="libreria" portTypeName="Libreria" locationUri="http://localhost:8080/libreria/webservices" > <sws:xsd location="classpath:schema.xsd"/> </sws:dynamic-wsdl> |
A questo punto definiamo l’endpoint che si preoccupa di gestire il servizio di Ricerca Libro. Nella definizione degli endpoint si cambia approccio, mentre prima il mapping veniva gestito tramite file xml, adesso tutto è demandato alle annotation:
l’annotazione @Endpoint definisce che una classe è un endpoint
l’annotazione @Autowired definisce il costruttore della costruttore qualora sia necessario fare l’injection di alcuni parametri
l’annotazione @PayloadRoot(localPart = “RicercaLibroRequest”, namespace = “http://finazzo.it/libreria/schema”) definisce la regola di mapping dell’endpoint
Una volta definiti gli endpoint passiamo alla definizione del mapping degli endpoint, tramite la classe PayloadRootAnnotationMethodEndpointMapping
1 2 3 |
<bean id="payloadMapping" class="org.springframework.ws.server.endpoint. mapping.PayloadRootAnnotationMethodEndpointMapping"/> |
Questa è la classe responsabile di instradare i messaggi verso l’opportuno endpoint in base all’analisi del messaggi soap ricevuti e le regole definite di attivazione definite tramite annotation.
Qui trovate l’archetipo estratto dal progetto appena descritto, in modo da poter provare di persona quanto fatto.