<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>spring-ws | www.valeriofinazzo.it</title>
	<atom:link href="http://www.valeriofinazzo.it/wordpress/tag/spring-ws-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.valeriofinazzo.it/wordpress</link>
	<description>Il sito dell&#039;ingegnere Valerio Finazzo</description>
	<lastBuildDate>Wed, 18 Jun 2014 22:26:00 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.3</generator>
	<item>
		<title>SPRING WS &#8211; TUTORIAL 10 &#8211; USARE LA VERSIONE 2.0</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-10-usare-la-versione-2-0/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 22:12:39 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=122</guid>

					<description><![CDATA[<p>La versione 2.0 di Spring-ws introduce la dipendenza da Spring 3.0 e spinge verso l&#8217;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 &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-10-usare-la-versione-2-0/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 10 &#8211; USARE LA VERSIONE 2.0</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-10-usare-la-versione-2-0/">SPRING WS – TUTORIAL 10 – USARE LA VERSIONE 2.0</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: #0d293f; text-align: justify;">La versione 2.0 di Spring-ws introduce la dipendenza da Spring 3.0 e spinge verso l&#8217;uso delle annotation, lasciando il supporto deprecato delle classi che abbiamo imparato a conoscere nei precedenti articoli-</p>
<p style="color: #0d293f; text-align: justify;">In questo articolo vedremo le nuove feature introdotte da Spring-ws.</p>
<p style="color: #0d293f; text-align: justify;">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.</p>
<p></p><pre class="crayon-plain-tag">mvn archetype:create 
-DarchetypeGroupId=org.springframework.ws 
-DarchetypeArtifactId=spring-ws-archetype 
-DarchetypeVersion=2.0.2.RELEASE 
-DgroupId=it.finazzo 
-DartifactId=libreriaservice</pre><p>Con la direttiva indicata Spring-ws crea la directory libreriaservice</p>
<p style="color: #0d293f; text-align: justify;">Spostiamoci all&#8217;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 &lt;sws:annotation-driven/&gt;</p>
<p style="color: #0d293f; text-align: justify;">Recuperiamo lo schema xsd che abbiamo creato nei precedenti articoli e lo copiamo sotto la cartella resources.</p>
<p style="color: #0d293f; text-align: justify;">Definiamo  il bean che si occupa della generazione del wsdl tramite il seguente tag</p>
<p></p><pre class="crayon-plain-tag">&lt;sws:dynamic-wsdl 
id="libreria" 
portTypeName="Libreria" 
locationUri="http://localhost:8080/libreria/webservices" &gt; 
&lt;sws:xsd 
location="classpath:schema.xsd"/&gt; 
&lt;/sws:dynamic-wsdl&gt;</pre><p>A questo punto definiamo l&#8217;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:</p>
<p style="color: #0d293f; text-align: justify;">l&#8217;annotazione @Endpoint definisce che una classe è un endpoint</p>
<p style="color: #0d293f; text-align: justify;">l&#8217;annotazione @Autowired definisce il costruttore della costruttore qualora sia necessario fare l&#8217;injection di alcuni parametri</p>
<p style="color: #0d293f; text-align: justify;">l&#8217;annotazione @PayloadRoot(localPart = &#8220;RicercaLibroRequest&#8221;, namespace = &#8220;http://finazzo.it/libreria/schema&#8221;) definisce la regola di mapping dell&#8217;endpoint</p>
<p style="color: #0d293f; text-align: justify;">Una volta definiti gli endpoint passiamo alla definizione del mapping degli endpoint, tramite la classe PayloadRootAnnotationMethodEndpointMapping</p>
<p></p><pre class="crayon-plain-tag">&lt;bean id="payloadMapping" 
class="org.springframework.ws.server.endpoint.
mapping.PayloadRootAnnotationMethodEndpointMapping"/&gt;</pre><p>Questa è la classe responsabile di instradare i messaggi verso l&#8217;opportuno endpoint in base all&#8217;analisi del messaggi soap ricevuti e le regole definite di attivazione definite tramite annotation.</p>
<p style="color: #0d293f; text-align: justify;"><a style="color: #2675b5;" href="http://www.valeriofinazzo.it/joomla/file/libreriaservice-archetype-1.0-SNAPSHOT.jar">Qui</a> trovate l&#8217;archetipo estratto dal progetto appena descritto, in modo da poter provare di persona quanto fatto.</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-10-usare-la-versione-2-0%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%2010%20%E2%80%93%20USARE%20LA%20VERSIONE%202.0" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-10-usare-la-versione-2-0%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%2010%20%E2%80%93%20USARE%20LA%20VERSIONE%202.0" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-10-usare-la-versione-2-0%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%2010%20%E2%80%93%20USARE%20LA%20VERSIONE%202.0" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-10-usare-la-versione-2-0%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%2010%20%E2%80%93%20USARE%20LA%20VERSIONE%202.0" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-10-usare-la-versione-2-0%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%2010%20%E2%80%93%20USARE%20LA%20VERSIONE%202.0" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-10-usare-la-versione-2-0%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%2010%20%E2%80%93%20USARE%20LA%20VERSIONE%202.0" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-10-usare-la-versione-2-0/" data-a2a-title="SPRING WS – TUTORIAL 10 – USARE LA VERSIONE 2.0"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-10-usare-la-versione-2-0/">SPRING WS – TUTORIAL 10 – USARE LA VERSIONE 2.0</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SPRING WS &#8211; TUTORIAL 9 &#8211; GESTIONE CLIENT</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-9-gestione-client/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 22:10:19 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=120</guid>

					<description><![CDATA[<p>Nell&#8217;articolo di oggi vedremo le API che Spring-Ws mette a disposizione per la realizzazione di un client. Alla base di tutto vi è la classe WebServiceTemplate che offre i metodi per l&#8217;invio e la ricezione dei messagi.I messaggi possono essere inviati e ricevuti come puro stream oppure possono essere soggetti al processo di marshalling e &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-9-gestione-client/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 9 &#8211; GESTIONE CLIENT</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-9-gestione-client/">SPRING WS – TUTORIAL 9 – GESTIONE CLIENT</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: #0d293f;">Nell&#8217;articolo di oggi vedremo le API che Spring-Ws mette a disposizione per la realizzazione di un client.<br />
Alla base di tutto vi è la classe WebServiceTemplate che offre i metodi per l&#8217;invio e la ricezione dei messagi.I messaggi possono essere inviati e ricevuti come puro stream oppure possono essere soggetti al processo di marshalling e unmarshalling.</p>
<p style="color: #0d293f;">Occorre prima di tutto definire il nostro client nei file di configurazione di Spring, tramite la solita definizione di bean.</p>
<p></p><pre class="crayon-plain-tag">&lt;bean id="client" 
class="org.springframework.ws.client.core.WebServiceTemplate"&gt;
&lt;property name="defaultUri" 
value="http://example.com/WebService" /&gt;
&lt;property name="messageFactory" ref="messageFactory" /&gt;
&lt;/bean&gt;</pre><p>La property defautUrl indica la URL dei servizi da invocare, mentre la messageFactory individua la classe responsabile della generazione dei messaggi da inviare.</p>
<p style="color: #0d293f;">Come factory Spring mette a disposizione 2 implementazioni:</p>
<ul style="color: #143c5d;">
<li><span style="color: #0d293f;">SaajSoapMessageFactory basata su SAAJ</span></li>
<li><span style="color: #0d293f;">AxiomSoapMessageFactory basata su Axiom</span></li>
</ul>
<p style="color: #0d293f;">In assenza del valore Spring userà di default l&#8217;implementazione basata su SAAJ.</p>
<p style="color: #0d293f;">Nei file xml di Spring-Ws setteremo la factory desiderata come</p>
<p></p><pre class="crayon-plain-tag">&lt;bean id="messageFactory" 
class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory" /&gt; 
&lt;bean id="messageFactory" 
class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory" /&gt;</pre><p>A questo possiamo sfruttare il nostro client per invocare il servizio e gestirne il risultato.</p><pre class="crayon-plain-tag">StreamSource source = new StreamSource(new StringReader(MESSAGE));
StreamResult result = new StreamResult(System.out);
client.sendSourceAndReceiveToResult(source, result);</pre><p>In source è disponibile il messaggio nel formato atteso dal servizio remoto e nella System.out verrà riversato la risposta del server.</p>
<p style="color: #0d293f;">Invocazione coclusa con minimo sforzo. A questo punto andrebbe analizzata la risposta per gestire le nuove azioni da intraprendere.</p>
<p style="color: #0d293f;">Come ulteriore aiuto Spring-Ws ci da la possibilità di sfruttare le tecniche di marshalling e unmarshalling per ottenere degli oggetti già pronti per l&#8217;uso.</p>
<p style="color: #0d293f;">Per fare cià occorre valorizzare il marshaller e l&#8217;unmarshallere all&#8217;interno del nostro client.</p>
<p></p><pre class="crayon-plain-tag">&amp;lt;bean id=&quot;client&quot; 
class=&quot;org.springframework.ws.client.core.WebServiceTemplate&quot;&amp;gt;
&amp;lt;property name=&quot;defaultUri&quot; value=&quot;http://example.com/WebService&quot; /&amp;gt;
&amp;lt;property name=&quot;messageFactory&quot; ref=&quot;messageFactory&quot; /&amp;gt;
&amp;lt;property name=&quot;marshaller&quot; ref=&quot;Marshaller&quot; /&amp;gt;
&amp;lt;property name=&quot;unmarshaller&quot; ref=&quot;Marshaller&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;</pre><p></p>
<p style="color: #0d293f;">Per la defizione del marshaller si rimanda all&#8217;articolo dedicato.</p>
<p style="color: #0d293f;">Definito il marshaller e l&#8217;unmarshaller verrà usato il seguente metodo che restituisce un oggetto valorizzato</p>
<p></p><pre class="crayon-plain-tag">Object response = client.marshalSendAndReceive(requestPayload);</pre><p>dove requestPayload è il bean che descrive la richiesta del sistema opportunamente valorizzata.</p>
<p style="color: #0d293f;">Nel caso in cui dobbiate gestire gli header SOAP dovete definire una classe che implementi l&#8217;interfaccia<code>WebServiceMessageCallback.</code></p>
<p style="color: #0d293f;"><code>Tale interfaccia definisce il metodo pub</code>lic void doWithMessage(WebServiceMessage message) che consente di modificare il messaggio prima del suo invio al server.</p>
<p style="color: #0d293f;">In questo caso invocherete il metodo</p>
<p></p><pre class="crayon-plain-tag">client.marshalSendAndReceive(requestPayload, new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) {
((SoapMessage)message).setSoapAction(&quot;action&quot;);
}
});</pre><p></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-9-gestione-client%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%209%20%E2%80%93%20GESTIONE%20CLIENT" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-9-gestione-client%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%209%20%E2%80%93%20GESTIONE%20CLIENT" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-9-gestione-client%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%209%20%E2%80%93%20GESTIONE%20CLIENT" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-9-gestione-client%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%209%20%E2%80%93%20GESTIONE%20CLIENT" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-9-gestione-client%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%209%20%E2%80%93%20GESTIONE%20CLIENT" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-9-gestione-client%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%209%20%E2%80%93%20GESTIONE%20CLIENT" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-9-gestione-client/" data-a2a-title="SPRING WS – TUTORIAL 9 – GESTIONE CLIENT"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-9-gestione-client/">SPRING WS – TUTORIAL 9 – GESTIONE CLIENT</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SPRING WS &#8211; TUTORIAL 8 &#8211; AUTENTICAZIONE</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-8-autenticazione/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 22:07:25 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=118</guid>

					<description><![CDATA[<p>Una volta creati i nostri servizi ci preoccuperemo di applicare delle policy di sicurezza al fine impedirne l&#8217;utilizzo a utenti non autorizzati Le policy di sicurezza si basano su 3 aspetti: l&#8217;autenticazione la firma la crittografia Implementando meccanismi di autenticazione si limita l&#8217;accesso ad utenti conosciuti dal sistema, con l&#8217;utilizzo della firma si certifica un &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-8-autenticazione/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 8 &#8211; AUTENTICAZIONE</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-8-autenticazione/">SPRING WS – TUTORIAL 8 – AUTENTICAZIONE</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: #0d293f; text-align: justify;">Una volta creati i nostri servizi ci preoccuperemo di applicare delle policy di sicurezza al fine impedirne l&#8217;utilizzo a utenti non autorizzati</p>
<p style="color: #0d293f; text-align: justify;">Le policy di sicurezza si basano su 3 aspetti:</p>
<ul style="color: #143c5d; text-align: justify;">
<li>l&#8217;autenticazione</li>
<li>la firma</li>
<li>la crittografia</li>
</ul>
<p style="color: #0d293f; text-align: justify;">Implementando meccanismi di autenticazione si limita l&#8217;accesso ad utenti conosciuti dal sistema, con l&#8217;utilizzo della firma si certifica un contenuto e con la crittografia si trasforma il flusso di dati in un flusso impossibile da leggere senza l&#8217;opportuna chiave.</p>
<p style="color: #0d293f; text-align: justify;">Nell&#8217;articolo di oggi vedremo gli strumenti che offre Spring-ws per gestire l&#8217;autenticazione.</p>
<p style="color: #0d293f; text-align: justify;">Spring-ws mette a disposizione 2 implementazioni dell&#8217;interfaccia Interceptor:</p>
<ul style="color: #143c5d; text-align: justify;">
<li>XwsSecurityInterceptor basato sull&#8217;implementazione della SUN XWSS Xml and Web Service Security</li>
<li>Wss4jSecurityInterceptor basato sull&#8217;implementazione di Apache WSS4J</li>
</ul>
<div style="color: #0d293f; text-align: justify;">Per iniziare vedremo il caso di autenticazione più semplice, ovvero quello che prevede di inviare come header della soap un tag chiamato UsernameToken che prevede 2 attributi in chiaro contenenti username e password.</div>
<div style="color: #0d293f; text-align: justify;">E&#8217; un meccanismo molto semplice da usare che va abbinato ad altre tecniche come la crittografia, visto che l&#8217;invio in chiaro dei dati di accesso non è cosa bella.</div>
<div style="color: #0d293f; text-align: justify;">Scegliamo di usare l&#8217;implementazione XwsSecurityInterceptor, che prevede la definizione di un file contenente le policy di sicurezza.</div>
<div style="color: #0d293f; text-align: justify;">All&#8217;interno del file definiamo la regola di sicurezza</div>
<div style="color: #0d293f; text-align: justify;"></div>
<div style="color: #0d293f; text-align: justify;">
<pre class="crayon-plain-tag">&lt;xwss:SecurityConfiguration dumpMessages="false" 
xmlns:xwss="http://java.sun.com/xml/ns/xwss/config"&gt;
&lt;xwss:RequireUsernameToken  
passwordDigestRequired="false" nonceRequired="false"/&gt;
&lt;/xwss:SecurityConfiguration&gt;</pre><br />
Stiamo dicendo al nostro modulo che ogni richiesta per essere accettata deve contenere il token UsernameToken, che la password non deve essere crittografata e che non è richiesto il nonce. Per maggiori dettagli sugli attributi del token Username rimando alle <a style="color: #2675b5;" href="http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/XWS-SecurityIntro4.html#wp567459" target="_blank">specifiche</a> di SUN. Per informazioni sul Nonce ripassate concetti di crittografia.</p>
</div>
<div style="color: #0d293f; text-align: justify;">A questo punto definiamo l&#8217;interceptor e le sue regole</div>
<div style="color: #0d293f; text-align: justify;"></div>
<div style="color: #0d293f; text-align: justify;">
<pre class="crayon-plain-tag">&lt;bean id="wsSecurityInterceptor"
class="org.springframework.ws.soap.security.xwss.XwsSecurityInterceptor"&gt;
&lt;property name="policyConfiguration" value="classpath:securityPolicy.xml"/&gt;
&lt;property name="callbackHandlers"&gt;
&lt;list&gt;
&lt;ref bean="passwordValidationHandler"/&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="passwordValidationHandler"
 class="org.springframework.ws.soap.security.xwss.
callback.SimplePasswordValidationCallbackHandler"&gt;
 &lt;property name="users"&gt;
 &lt;props&gt;
 &lt;prop key="Valerio"&gt;Finazzo&lt;/prop&gt;
 &lt;/props&gt;
 &lt;/property&gt;
&lt;/bean&gt;</pre><br />
Il nostro interceptor carica le regole da applicare dal file di policy definito precedentemente, mentre con il bean passwordValidationHandler definiamo gli utenti che possono accedere ai nostri servizi, in questo caso username/password Valerio/Finazzo</p>
</div>
<div style="color: #0d293f; text-align: justify;">Qualora nella nostra richiesta non sia presente il token usernameToken il server genera un FAULT specificando l&#8217;errore.</div>
<div style="color: #0d293f; text-align: justify;">Per testare quanto fatto consiglio SoapUi con cui potete creare agevolmente le request e aggiungere gli header per la sicurezza, ottenendo qualcosa del genere</div>
<div style="color: #0d293f; text-align: justify;"></div>
<div style="color: #0d293f; text-align: justify;">
<pre class="crayon-plain-tag">&lt;soapenv:Envelope 
xmlns:sch="http://www.example.org/schema" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&gt;
&lt;soapenv:Header&gt;&lt;wsse:Security 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&gt;
&lt;wsse:UsernameToken wsu:Id="UsernameToken-14" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"&gt;
&lt;wsse:Username&gt;Valerio&lt;/wsse:Username&gt;
&lt;wsse:Password 
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"&gt;
Finazzo&lt;/wsse:Password&gt;
&lt;/wsse:UsernameToken&gt;&lt;/wsse:Security&gt;
&lt;/soapenv:Header&gt;
&lt;soapenv:Body&gt;
&lt;sch:RicercaLibroRequest&gt;
&lt;!--Optional:--&gt;
&lt;sch:titolo&gt;?&lt;/sch:titolo&gt;
&lt;!--Optional:--&gt;
&lt;sch:nome&gt;?&lt;/sch:nome&gt;
&lt;!--Optional:--&gt;
&lt;sch:cognome&gt;?&lt;/sch:cognome&gt;
&lt;/sch:RicercaLibroRequest&gt;
&lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre><br />
Nel prossimo articolo vedremo tecniche più avanzate per gestire l&#8217;autenticazione.</p>
</div>
<p style="text-align: justify;">
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-8-autenticazione%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%208%20%E2%80%93%20AUTENTICAZIONE" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-8-autenticazione%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%208%20%E2%80%93%20AUTENTICAZIONE" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-8-autenticazione%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%208%20%E2%80%93%20AUTENTICAZIONE" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-8-autenticazione%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%208%20%E2%80%93%20AUTENTICAZIONE" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-8-autenticazione%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%208%20%E2%80%93%20AUTENTICAZIONE" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-8-autenticazione%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%208%20%E2%80%93%20AUTENTICAZIONE" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-8-autenticazione/" data-a2a-title="SPRING WS – TUTORIAL 8 – AUTENTICAZIONE"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-8-autenticazione/">SPRING WS – TUTORIAL 8 – AUTENTICAZIONE</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SPRING WS &#8211; TUTORIAL 7 &#8211; GESTIRE LE ECCEZIONI</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-7-gestire-le-eccezioni/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 21:55:31 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=113</guid>

					<description><![CDATA[<p>In questo articolo vedremo la gestione delle eccezioni e i meccanismi che Spring-ws offre per la loro gestione. Spring mette a disposizione un gestore delle eccezioni che carica la mappa delle eccezioni e crea opportunamente i fault in corrispondenza di ogni eccezioni. [crayon-6411e29a8df73087608557/] Nel nostro esempio stiamo dicendo al gestore delle eccezioni che in corrispondenza &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-7-gestire-le-eccezioni/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 7 &#8211; GESTIRE LE ECCEZIONI</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-7-gestire-le-eccezioni/">SPRING WS – TUTORIAL 7 – GESTIRE LE ECCEZIONI</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: #0d293f;">In questo articolo vedremo la gestione delle eccezioni e i meccanismi che Spring-ws offre per la loro gestione.</p>
<p style="color: #0d293f;">Spring mette a disposizione un gestore delle eccezioni che carica la mappa delle eccezioni e crea opportunamente i fault in corrispondenza di ogni eccezioni.</p>
<p></p><pre class="crayon-plain-tag">&lt;bean id="exceptionResolver" 
class="org.springframework.ws.soap.server.endpoint.SoapFaultMappingExceptionResolver"&gt;    
&lt;property name="defaultFault" value="SERVER"/&gt;
&lt;property name="exceptionMappings"&gt;
&lt;value&gt;it.finazzo.libreria.exception.LibroException=SERVER,Invalid request&lt;/value&gt;
&lt;/property&gt;
&lt;/bean&gt;</pre><p>Nel nostro esempio stiamo dicendo al gestore delle eccezioni che in corrispondenza di una eccezione LibroException deve essere creato un fault con i parametri indicati, come quello mostrato sotto.</p><pre class="crayon-plain-tag">&lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"&gt;
   &lt;SOAP-ENV:Header/&gt;
   &lt;SOAP-ENV:Body&gt;
      &lt;SOAP-ENV:Fault&gt;
         &lt;faultcode&gt;SOAP-ENV:Server&lt;/faultcode&gt;
         &lt;faultstring xml:lang="en"&gt;Invalid request&lt;/faultstring&gt;
      &lt;/SOAP-ENV:Fault&gt;
   &lt;/SOAP-ENV:Body&gt;
&lt;/SOAP-ENV:Envelope&gt;</pre><p>Per chi usale annotazioni e non vuole file xml con lunghe configurazione Spring mette a disposizione la annotazione @SoapFault. Una volta definita una eccezione è possibile definire il fault da lanciare e i parametri con cui configurarla</p>
<p>Possiamo ottenere un fault analogo a quello descritto sopra definendo così la nostra eccezione</p><pre class="crayon-plain-tag">&lt;span style=&quot;color: #0d293f;&quot;&gt;@SoapFault(faultCode = FaultCode.SERVER, faultStringOrReason=&quot;&lt;span style=&quot;color: #000000;&quot;&gt;Invalid request&lt;/span&gt;&quot;)
&lt;/span&gt;public class LibroException extends Exception</pre><p></p>
<p style="color: #0d293f;">e aggiungendo tra i bean di Spring l&#8217;opportuna implementazione</p>
<p></p><pre class="crayon-plain-tag">&lt;bean id="exceptionAnnotationResolver" 
class="org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver" /&gt;</pre><p>Per chi ha creato il progetto tramite Maven ricordarsi di aggiungere la dipendenza dalle librerie di spring-ws che supportano le feature della jdk 1.5.</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-7-gestire-le-eccezioni%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%207%20%E2%80%93%20GESTIRE%20LE%20ECCEZIONI" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-7-gestire-le-eccezioni%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%207%20%E2%80%93%20GESTIRE%20LE%20ECCEZIONI" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-7-gestire-le-eccezioni%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%207%20%E2%80%93%20GESTIRE%20LE%20ECCEZIONI" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-7-gestire-le-eccezioni%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%207%20%E2%80%93%20GESTIRE%20LE%20ECCEZIONI" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-7-gestire-le-eccezioni%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%207%20%E2%80%93%20GESTIRE%20LE%20ECCEZIONI" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-7-gestire-le-eccezioni%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%207%20%E2%80%93%20GESTIRE%20LE%20ECCEZIONI" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-7-gestire-le-eccezioni/" data-a2a-title="SPRING WS – TUTORIAL 7 – GESTIRE LE ECCEZIONI"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-7-gestire-le-eccezioni/">SPRING WS – TUTORIAL 7 – GESTIRE LE ECCEZIONI</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SPRING WS &#8211; TUTORIAL 6 &#8211; USARE GLI INTERCEPTOR</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-6-usare-gli-interceptor/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 21:52:20 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=111</guid>

					<description><![CDATA[<p>In questo articolo vedremo come poter intercettare le richieste di servizio per effettuare le operazioni prima e dopo l&#8217;esecuzione dell&#8217;endpoint. Fondamentale l&#8217;interceptor ci permette di: loggare le richieste e le risposte inviate applicare dei meccanismi di sicurezza alle richieste pervenute gestire i fault di sistema Per definire un interceptor occorre implementare l&#8217;interfaccia EndpointInterceptot che presenta &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-6-usare-gli-interceptor/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 6 &#8211; USARE GLI INTERCEPTOR</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-6-usare-gli-interceptor/">SPRING WS – TUTORIAL 6 – USARE GLI INTERCEPTOR</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: #0d293f;">In questo articolo vedremo come poter intercettare le richieste di servizio per effettuare le operazioni prima e dopo l&#8217;esecuzione dell&#8217;endpoint.</p>
<p style="color: #0d293f;">Fondamentale l&#8217;interceptor ci permette di:</p>
<ul style="color: #143c5d;">
<li>loggare le richieste e le risposte inviate</li>
<li>applicare dei meccanismi di sicurezza alle richieste pervenute</li>
<li>gestire i fault di sistema</li>
</ul>
<div style="color: #0d293f;">Per definire un interceptor occorre implementare l&#8217;interfaccia EndpointInterceptot che presenta i seguenti metodi:</div>
<div style="color: #0d293f;">
<ul style="color: #143c5d;">
<li>handleRequest</li>
<li>handleResponse</li>
<li>handleFault</li>
</ul>
</div>
<div style="color: #0d293f;">Il metodo handleRequest viene invocato prima dell&#8217;esecuzione dell&#8217;endpoint e il suo utilizzo principale è quello di bloccare l&#8217;esecuzione di un servizio.</div>
<div style="color: #0d293f;">Il metodo handleResponse viene invocato dopo l&#8217;esecuzione dell&#8217;endpoint e il sul utilizzo principale è quello di elaborare la risposta, magari aggiungendo attributi.</div>
<div style="color: #0d293f;">Il metodo handleFault viene invocato dopo l&#8217;esecuzione di un fault con finalità analoghe a quelle del metodo handleResponse.</div>
<div style="color: #0d293f;">Per chi non avesse particolari esigenze Spring offre già alcune implementazioni di interceptor:</div>
<div style="color: #0d293f;"></div>
<div style="color: #0d293f;">
<ul style="color: #143c5d;">
<li>PayloadLoggingInterceptor</li>
<li>PayloadValidatingInterceptor</li>
<li>PayloadTransformingInterceptor</li>
</ul>
<div>Il PayloadLoggingInterceptor permette di loggare le richieste e le risposte.</div>
<div>Il PayloadValidatingInterceptor valida le richieste e le risposte in base ad uno schema xsd indicato nelle sue properties.</div>
<div>Il PayloadTransformingInterceptor effettua una transformazione delle richieste e delle risposte basate su XSLT. Viene usato quando il server gestisce più versioni dello stesso servizio.</div>
</div>
<p style="color: #0d293f;">Nel nostro progetto applichiamo un logger delle richieste e delle risposte e un validatore, ottenendo una configurazione di questo tipo.</p>
<p></p><pre class="crayon-plain-tag">&lt;bean 
class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping"&gt;
&lt;property name="mappings"&gt;
        &lt;props&gt;
            &lt;prop key="{http://www.example.org/schema}RicercaLibroRequest"&gt;ricercaLibroEndpoint&lt;/prop&gt;
        &lt;/props&gt;
    &lt;/property&gt;
    &lt;property name="interceptors"&gt;
	    &lt;list&gt;
              &lt;ref bean="loggingInterceptor"/&gt;
              &lt;ref bean="validatingInterceptor"/&gt;
          &lt;/list&gt;
        &lt;/property&gt;
    &lt;/bean&gt;
&lt;bean id="loggingInterceptor"  
      class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor"/&gt;

&lt;bean id="validatingInterceptor" 
      class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor"&gt;
    &lt;property name="schema" value="classpath:schema.xsd"/&gt;
    &lt;property name="validateRequest" value="true"/&gt;
    &lt;property name="validateResponse" value="true"/&gt;
&lt;/bean&gt;</pre><p></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-6-usare-gli-interceptor%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%206%20%E2%80%93%20USARE%20GLI%20INTERCEPTOR" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-6-usare-gli-interceptor%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%206%20%E2%80%93%20USARE%20GLI%20INTERCEPTOR" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-6-usare-gli-interceptor%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%206%20%E2%80%93%20USARE%20GLI%20INTERCEPTOR" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-6-usare-gli-interceptor%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%206%20%E2%80%93%20USARE%20GLI%20INTERCEPTOR" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-6-usare-gli-interceptor%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%206%20%E2%80%93%20USARE%20GLI%20INTERCEPTOR" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-6-usare-gli-interceptor%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%206%20%E2%80%93%20USARE%20GLI%20INTERCEPTOR" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-6-usare-gli-interceptor/" data-a2a-title="SPRING WS – TUTORIAL 6 – USARE GLI INTERCEPTOR"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-6-usare-gli-interceptor/">SPRING WS – TUTORIAL 6 – USARE GLI INTERCEPTOR</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SPRING WS &#8211; TUTORIAL 5 &#8211; USARE IL MARSHALLING</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-5-usare-il-marshalling/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 21:51:03 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=109</guid>

					<description><![CDATA[<p>In questo articolo vedremo le tecniche di marshalling che mette a disposizione Spring-ws per la gestione dei messaggi di richiesta e risposta dei web services. Tutte le implementazione degli endpoint fornite dal framework prevedono 2 proprietà: marshaller unmarshaller Il marshaller è responsabile di serializzare l&#8217;oggetto in un frammento xml, mentre l&#8217;unmarsheller effettua l&#8217;operazione contraria. Sono &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-5-usare-il-marshalling/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 5 &#8211; USARE IL MARSHALLING</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-5-usare-il-marshalling/">SPRING WS – TUTORIAL 5 – USARE IL MARSHALLING</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: #0d293f;">In questo articolo vedremo le tecniche di marshalling che mette a disposizione Spring-ws per la gestione dei messaggi di richiesta e risposta dei web services.</p>
<p style="color: #0d293f;">Tutte le implementazione degli endpoint fornite dal framework prevedono 2 proprietà:</p>
<ul style="color: #143c5d;">
<li>marshaller</li>
<li>unmarshaller</li>
</ul>
<div style="color: #0d293f;">Il marshaller è responsabile di serializzare l&#8217;oggetto in un frammento xml, mentre l&#8217;unmarsheller effettua l&#8217;operazione contraria.</div>
<div style="color: #0d293f;">Sono previste più implementazioni dei marsheller, pertanto lo sviluppatore può scegliere con libertà l&#8217;implementazione più conveniente. Personalmente utilizzo jaxb2 che è disponibile a partire da java 6 con la virtual machine.</div>
<div style="color: #0d293f;">Per le altre implementazioni JAXB1, Castor, XMLBEANS rimando alla javadoc disponibile su spring-ws.</div>
<div style="color: #0d293f;">Definiamo il bean che descrive il marshaller e lo settiamo come attributo dell&#8217;endpoint</div>
<div style="color: #0d293f;"></div>
<div>
<pre class="crayon-plain-tag">&lt;bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"&gt;
       &lt;property name="contextPath" value="it.finazzo.libreria.schema"/&gt;
       &lt;property name="schema" value="classpath:schema.xsd"/&gt;
&lt;/bean&gt;
&lt;bean id="ricercaLibroEndpoint" class="it.finazzo.libreria.ws.RicercaLibroEndpoint"&gt;
      &lt;property name="marshaller" ref="jaxb2Marshaller"&gt;&lt;/property&gt;
      &lt;property name="unmarshaller" ref="jaxb2Marshaller"&gt;&lt;/property&gt;
&lt;/bean&gt;</pre><br />
La property schema del marshaller serve per la validazione della richiesta, mentre nella property contextPath specifichiamo il package dove sono disponibili le classi per il marshalling. Tali classi possono essere generate in automatico tramite un plugin disponibile per Maven. Per sfruttare questo plugin occorre inserire questo frammento nel pom.xml</p>
</div>
<div>
<pre class="crayon-plain-tag">&lt;plugin&gt;
       &lt;groupId&gt;com.sun.tools.xjc.maven2&lt;/groupId&gt;
       &lt;artifactId&gt;maven-jaxb-plugin&lt;/artifactId&gt;
       &lt;executions&gt;
             &lt;execution&gt;
                 &lt;phase&gt;generate-sources&lt;/phase&gt;
                  &lt;goals&gt;
                      &lt;goal&gt;generate&lt;/goal&gt;
                  &lt;/goals&gt;
             &lt;/execution&gt;
       &lt;/executions&gt;
       &lt;configuration&gt;
            &lt;generatePackage&gt;it.finazzo.libreria.schema&lt;/generatePackage&gt;
       &lt;/configuration&gt;
&lt;/plugin&gt;</pre><br />
e definire le resources</p>
</div>
<div>
<pre class="crayon-plain-tag">&lt;resource&gt; 
&lt;directory&gt;src/main/resources&lt;/directory&gt; 
&lt;filtering&gt;true&lt;/filtering&gt;
&lt;/resource&gt;</pre><br />
Tale plugin analizza i file xsd disponibili nella directory resource e genera le classi nel package configurato.</p>
</div>
<div style="color: #0d293f;">Infine occorre cambiare l&#8217;implementazione dell&#8217;endpoint estendendo la classe di spring-ws che supporta il marshalling:</div>
<div style="color: #0d293f;"></div>
<div>
<pre class="crayon-plain-tag">public class RicercaLibroEndpoint extends AbstractMarshallingPayloadEndpoint {
protected Object invokeInternal(Object arg0) throws Exception {
return new RicercaLibroResponse();
}
}</pre><br />
A questo punto mvn install e proviamo il frutto delle nostre fatiche.</p>
</div>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-5-usare-il-marshalling%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%205%20%E2%80%93%20USARE%20IL%20MARSHALLING" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-5-usare-il-marshalling%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%205%20%E2%80%93%20USARE%20IL%20MARSHALLING" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-5-usare-il-marshalling%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%205%20%E2%80%93%20USARE%20IL%20MARSHALLING" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-5-usare-il-marshalling%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%205%20%E2%80%93%20USARE%20IL%20MARSHALLING" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-5-usare-il-marshalling%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%205%20%E2%80%93%20USARE%20IL%20MARSHALLING" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-5-usare-il-marshalling%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%205%20%E2%80%93%20USARE%20IL%20MARSHALLING" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-5-usare-il-marshalling/" data-a2a-title="SPRING WS – TUTORIAL 5 – USARE IL MARSHALLING"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-5-usare-il-marshalling/">SPRING WS – TUTORIAL 5 – USARE IL MARSHALLING</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SPRING WS &#8211; TUTORIAL 4 &#8211; MAPPING DEI SERVIZI</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-4-mapping-dei-servizi/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 21:46:46 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=104</guid>

					<description><![CDATA[<p>Nell&#8217;articolo di oggi vedremo come mappare i servizi e gestire la loro implementazione. Occorre prima di tutto scegliere la tecnica di gestione per i messaggi xml. Possiamo usare delle librerie di gestione di messaggi xml come JDOM o SAX oppure delle tecniche di marshalling per la trasformazione di flussi xml in classi java e viceversa, &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-4-mapping-dei-servizi/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 4 &#8211; MAPPING DEI SERVIZI</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-4-mapping-dei-servizi/">SPRING WS – TUTORIAL 4 – MAPPING DEI SERVIZI</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: #0d293f; text-align: justify;">Nell&#8217;articolo di oggi vedremo come mappare i servizi e gestire la loro implementazione.</p>
<p style="color: #0d293f; text-align: justify;">Occorre prima di tutto scegliere la tecnica di gestione per i messaggi xml. Possiamo usare delle librerie di gestione di messaggi xml come JDOM o SAX oppure delle tecniche di marshalling per la trasformazione di flussi xml in classi java e viceversa, come JAXB e XMLBEANS.</p>
<p style="color: #0d293f; text-align: justify;">Spring-ws supporta tutte le principali librerie per la gestione dei file xml pertanto la scelta della libreria deve essere fatta valutando anche l&#8217;ambiente a disposizione.</p>
<p style="color: #0d293f; text-align: justify;">In questo caso ho scelto JDOM, una libreria opensource che semplifica la gestione di DOM. Occorre modificare il file pom.xml per introdurre le dipendenza dalla libreria JDOM. Nel nostro caso si traduce in questo set di dipendenze:</p>
<p></p><pre class="crayon-plain-tag">&lt;dependency&gt;
&lt;groupId&gt;jdom&lt;/groupId&gt;
&lt;artifactId&gt;jdom&lt;/artifactId&gt;	
&lt;version&gt;1.0&lt;/version&gt;	
&lt;/dependency&gt;	    
&lt;dependency&gt;	        
&lt;groupId&gt;jaxen&lt;/groupId&gt;	        
&lt;artifactId&gt;jaxen&lt;/artifactId&gt;	        
&lt;version&gt;1.1&lt;/version&gt;	    
&lt;/dependency&gt;	    
&lt;dependency&gt;	        
&lt;groupId&gt;javax.xml.soap&lt;/groupId&gt;	        
&lt;artifactId&gt;saaj-api&lt;/artifactId&gt;	        
&lt;version&gt;1.3&lt;/version&gt;	        
&lt;scope&gt;runtime&lt;/scope&gt;	    
&lt;/dependency&gt;	    
&lt;dependency&gt;	        
&lt;groupId&gt;com.sun.xml.messaging.saaj&lt;/groupId&gt;	        
&lt;artifactId&gt;saaj-impl&lt;/artifactId&gt;	        
&lt;version&gt;1.3&lt;/version&gt;	        
&lt;scope&gt;runtime&lt;/scope&gt;	    
&lt;/dependency&gt;</pre><p></p>
<p style="color: #0d293f; text-align: justify;">All&#8217;interno del file spring-ws-servlet.xml definiamo il bean che implementa il servizio di RicercaLibro.</p>
<p></p><pre class="crayon-plain-tag">&lt;bean id="ricercaLibroEndpoint" class="it.finazzo.libreria.ws.RicercaLibroEndpoint"/&gt;</pre><p></p>
<p style="color: #0d293f; text-align: justify;">Tale classe estende la classe di Spring che gestisce l&#8217;integrazione con JDOM</p>
<p></p><pre class="crayon-plain-tag">public class RicercaLibroEndpoint extends AbstractJDomPayloadEndpoint {
	protected Element invokeInternal(Element arg0) throws Exception {		return null;
	}
}</pre><p></p>
<div style="color: #0d293f; text-align: justify;">Definiti il bean ci preoccupiamo di definire il mapping dei servizi, ovvero quale classe invocare in corrispondenza di uno specifico servizio:</div>
<div style="text-align: justify;">
<pre class="crayon-plain-tag">&lt;bean 
class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping"&gt;
&lt;property name="mappings"&gt;
&lt;props&gt;
&lt;prop key="{http://www.example.org/schema}RicercaLibroRequest"&gt;
ricercaLibroEndpoint
&lt;/prop&gt;
&lt;/props&gt;
&lt;/property&gt;
&lt;/bean&gt;</pre><br />
In questo caso stiamo dicendo al gestore delle mappe dei servizi, la classe implementata da Spring-Ws, che il servizio RicercaLibro deve invocare l&#8217;endpoint ricercaLibroEndpoint. Per la gestione del mapping spring-ws offre 2 diverse implementazione da scegliere in base al contesto in cui vi trovate.</p>
</div>
<ul style="color: #143c5d; text-align: justify;">
<li><span style="color: #000000;">PayloadRootQNameEndpointMapping</span></li>
<li><span style="color: #000000;">SoapActionEndpointMapping</span></li>
</ul>
<p style="color: #0d293f; text-align: justify;">Il mapping basato su Payload prevede l&#8217;analisi della richiesta per stabilire quale servizio stiamo invocando. Tale meccanismo è più lento ma è indipendente dalla specifica SOA e pertanto può essere usato sia in caso di SOA 1.1, 1.2 o qualsiasi altro livello di trasporto.</p>
<p style="color: #0d293f; text-align: justify;">Il secondo mapping sfrutta l&#8217;header SOAPAction, che permette di individuare il corretto routing senza analizzare tutta la risposta. Pertanto è più veloce ma è valido solo con la SOA 1.1, poichè nella SOA 1.2 tale parametro è stato reso deprecato.</p>
<p style="color: #0d293f; text-align: justify;">A questo punto non resta che provare il nostro servizio tramite Soap Ui e verificare il corretto funzionamento del routing.</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-4-mapping-dei-servizi%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%204%20%E2%80%93%20MAPPING%20DEI%20SERVIZI" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-4-mapping-dei-servizi%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%204%20%E2%80%93%20MAPPING%20DEI%20SERVIZI" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-4-mapping-dei-servizi%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%204%20%E2%80%93%20MAPPING%20DEI%20SERVIZI" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-4-mapping-dei-servizi%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%204%20%E2%80%93%20MAPPING%20DEI%20SERVIZI" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-4-mapping-dei-servizi%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%204%20%E2%80%93%20MAPPING%20DEI%20SERVIZI" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-4-mapping-dei-servizi%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%204%20%E2%80%93%20MAPPING%20DEI%20SERVIZI" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-4-mapping-dei-servizi/" data-a2a-title="SPRING WS – TUTORIAL 4 – MAPPING DEI SERVIZI"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-4-mapping-dei-servizi/">SPRING WS – TUTORIAL 4 – MAPPING DEI SERVIZI</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SPRING WS &#8211; TUTORIAL 3 &#8211; CREARE IL PROGETTO</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-3-creare-il-progetto/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 21:40:18 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=102</guid>

					<description><![CDATA[<p>Dopo aver definito il contratto passiamo all&#8217;implementazione del nostro server con servizi SOA. Per fare ciò usiamo Maven, che permette di automatizzare parte dei processi nella gestione del nostro sistema Per chi non conoscesse Maven rimando alla serie di articoli pubblicati nella sezione Documentazione. Apriamo una shell nella directory che ospita il nostro workspace e &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-3-creare-il-progetto/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 3 &#8211; CREARE IL PROGETTO</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-3-creare-il-progetto/">SPRING WS – TUTORIAL 3 – CREARE IL PROGETTO</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: #0d293f; text-align: justify;">Dopo aver definito il contratto passiamo all&#8217;implementazione del nostro server con servizi SOA. Per fare ciò usiamo Maven, che permette di automatizzare parte dei processi nella gestione del nostro sistema</p>
<p style="color: #0d293f; text-align: justify;">Per chi non conoscesse Maven rimando alla serie di articoli pubblicati nella sezione Documentazione.</p>
<p style="color: #0d293f; text-align: justify;">Apriamo una shell nella directory che ospita il nostro workspace e lanciamo il seguente comando</p>
<p></p><pre class="crayon-plain-tag">mvn archetype:generate 
-DarchetypeGroupId=org.springframework.ws 
-DarchetypeArtifactId=spring-ws-archetype 
-DarchetypeVersion=1.5.9 
-DgroupId=it.finazzo.libreria 
-DartifactId=libreria</pre><p>con questo comando stiamo dicendo a maven di creare un nuovo artefatto basato sull&#8217;archetipo di spring-ws versione 1.5.9.</p>
<p style="color: #0d293f; text-align: justify;">A questo punto Maven ha creato una directory con l&#8217;alberatura tipica di una web application e i file xml configurati per la sua gestione.</p>
<p style="color: #0d293f; text-align: justify;">Per semplificare i prossimi step possiamo importare il progetto tramite la direttiva eclipse:eclipse di maven. Troviamo 2 file xml pronti per essere modificati, il classico web.xml dove è definita la servlet preposta a ricevere i messaggi e il file spring-ws-servlet.xml dove definiremo le varie componenti del nostro server.</p>
<p style="color: #0d293f; text-align: justify;">Nella directory WEB-INF inseriamo il file xsd contenente la struttura dei nostri servizi e nel file spring-ws-servlet.xml definiamo un bean che possa gestirlo.</p>
<p></p><pre class="crayon-plain-tag">&amp;lt;bean id=&quot;gestioneLibri&quot; 
class=&quot;org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition&quot;&amp;gt;
&amp;lt;property name=&quot;schema&quot; ref=&quot;schema&quot;/&amp;gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&amp;lt;property name=&quot;portTypeName&quot; value=&quot;Libreria&quot;/&amp;gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&amp;lt;property name=&quot;locationUri&quot; value=&quot;/gestioneLibri/webservices&quot;/&amp;gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&amp;lt;/bean&amp;gt;
&amp;lt;bean id=&quot;schema&quot; class=&quot;org.springframework.xml.xsd.SimpleXsdSchema&quot;&amp;gt;
&amp;lt;property name=&quot;xsd&quot; value=&quot;/WEB-INF/schema.xsd&quot;/&amp;gt;
&amp;lt;/bean&amp;gt;</pre><p></p>
<p style="color: #0d293f; text-align: justify;">Il bean &#8216;schema&#8217; mappa il file xsd tramite una classe implementata da Spring e il bean &#8216;gestioneLibri&#8217; si preoccupa di generare il file wsdl a partire dall&#8217;analisi dello schema xsd e dalle proprietà definite, secondo quanto indicato nel precedente articolo.</p>
<p style="color: #0d293f; text-align: justify;">A questo punto tramite la direttiva install creiamo il file war e facciamo il deploy della nostra applicazione su tomcat.</p>
<p style="color: #0d293f; text-align: justify;">Una volta attivato il contesto il file wsdl sarà disponibile all&#8217;indirizzo http://&lt;server&gt;:&lt;port&gt;/&lt;context&gt;/gestioneLibri.wsdl.</p>
<p style="color: #0d293f; text-align: justify;">Nel prossimo articolo vedremo come gestire le chiamate ai servizi esposti.</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-3-creare-il-progetto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%203%20%E2%80%93%20CREARE%20IL%20PROGETTO" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-3-creare-il-progetto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%203%20%E2%80%93%20CREARE%20IL%20PROGETTO" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-3-creare-il-progetto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%203%20%E2%80%93%20CREARE%20IL%20PROGETTO" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-3-creare-il-progetto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%203%20%E2%80%93%20CREARE%20IL%20PROGETTO" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-3-creare-il-progetto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%203%20%E2%80%93%20CREARE%20IL%20PROGETTO" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-3-creare-il-progetto%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%203%20%E2%80%93%20CREARE%20IL%20PROGETTO" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-3-creare-il-progetto/" data-a2a-title="SPRING WS – TUTORIAL 3 – CREARE IL PROGETTO"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-3-creare-il-progetto/">SPRING WS – TUTORIAL 3 – CREARE IL PROGETTO</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SPRING WS &#8211; TUTORIAL 2 &#8211; CONOSCERE IL WSDL</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-2-conoscere-il-wsdl/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 21:37:14 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=100</guid>

					<description><![CDATA[<p>Per generarare il wsdl a partire dal file xsd occorre utilizzare una classe fornita da spring ws che in automatico nel rispetto di determinate convenzioni genera il nostro wsdl. La classe da utilizzare è la DefaultWsdl11Definition [crayon-6411e29a8fcf8202255639/] L&#8217;attributo id determina il nome del wsdl. In questo caso esporrà il wsdl libreria.wsdl La proprietà schema indica &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-2-conoscere-il-wsdl/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 2 &#8211; CONOSCERE IL WSDL</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-2-conoscere-il-wsdl/">SPRING WS – TUTORIAL 2 – CONOSCERE IL WSDL</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: #0d293f; text-align: justify;">Per generarare il wsdl a partire dal file xsd occorre utilizzare una classe fornita da spring ws che in automatico nel rispetto di determinate convenzioni genera il nostro wsdl.</p>
<p style="color: #0d293f; text-align: justify;">La classe da utilizzare è la DefaultWsdl11Definition</p>
<p></p><pre class="crayon-plain-tag">&lt;bean id="libreria" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition"&gt;
   &lt;property name="schema"&gt;
     &lt;bean class="org.springframework.xml.xsd.SimpleXsdSchema"&gt;
       &lt;property name="xsd" value="/WEB-INF/libreria.xsd"/&gt;
     &lt;/bean&gt;
   &lt;/property&gt;
   &lt;property name="portTypeName" value="Libreria"/&gt;
   &lt;property name="locationUri" value="http://localhost:10000/libreria/services"/&gt;
 &lt;/bean&gt;</pre><p></p>
<ul style="color: #143c5d; text-align: justify;">
<li>L&#8217;attributo id determina il nome del wsdl. In questo caso esporrà il wsdl libreria.wsdl</li>
<li>La proprietà schema indica il file da utilizzare per la generazione del file wsdl</li>
<li>le proprietà portTypeName e locationUri indicano i parametri da inserire all&#8217;interno del wsdl per la richiesta dei servizi.</li>
</ul>
<div style="color: #0d293f; text-align: justify;">La nostra classe genera analizza il file xsd alla ricerca di elementi con il suffisso Request e Response e per ogni elemento individua gli elementi tipici della specifica SOA.</div>
<div style="color: #0d293f; text-align: justify;">Nel nostro caso il wsdl generato ha la seguente forma</div>
<div style="color: #0d293f; text-align: justify;"></div>
<div class="e" style="text-align: justify;">
<pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="UTF-8" standalone="no" ?&gt;
&lt;wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:sch="http://www.example.org/schema" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:tns="http://www.example.org/schema" targetNamespace="http://www.example.org/schema"&gt;
&lt;wsdl:types&gt; 
  &lt;schema xmlns="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" 
  elementFormDefault="qualified" targetNamespace="http://www.example.org/schema"&gt;
&lt;complexType name="LibroType"&gt;
&lt;sequence&gt;
  &lt;element name="titolo" type="string" /&gt;
&lt;element name="nome" type="string" /&gt; 
&lt;element name="cognome"type="string" /&gt; 
&lt;/sequence&gt;
  &lt;/complexType&gt;
&lt;element name="RicercaLibroRequest"&gt;
&lt;complexType&gt;
&lt;sequence&gt;
  &lt;element minOccurs="0" name="titolo" type="string" /&gt;
  &lt;element minOccurs="0" name="nome" type="string" /&gt;
  &lt;element minOccurs="0" name="cognome" type="string" /&gt;
&lt;/sequence&gt;
&lt;/complexType&gt;
&lt;/element&gt;
&lt;element name="RicercaLibroResponse"&gt;
&lt;complexType&gt;
&lt;sequence&gt;
  &lt;element maxOccurs="unbounded" minOccurs="0" name="libro" type="string" /&gt;
&lt;/sequence&gt;
  &lt;/complexType&gt;
&lt;/element&gt;
&lt;/schema&gt;
&lt;/wsdl:types&gt;
&lt;wsdl:message name="RicercaLibroResponse"&gt;
  &lt;wsdl:part element="tns:RicercaLibroResponse" name="RicercaLibroResponse" /&gt;
  &lt;/wsdl:message&gt;
&lt;wsdl:message name="RicercaLibroRequest"&gt;
  &lt;wsdl:part element="tns:RicercaLibroRequest" name="RicercaLibroRequest" /&gt;
  &lt;/wsdl:message&gt;
&lt;wsdl:portType name="Libreria"&gt;
&lt;wsdl:operation name="RicercaLibro"&gt;
  &lt;wsdl:input message="tns:RicercaLibroRequest" name="RicercaLibroRequest" /&gt;
  &lt;wsdl:output message="tns:RicercaLibroResponse" name="RicercaLibroResponse" /&gt;
  &lt;/wsdl:operation&gt;
  &lt;/wsdl:portType&gt;
&lt;wsdl:binding name="LibreriaSoap11" type="tns:Libreria"&gt;
&lt;soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /&gt;
&lt;wsdl:operation name="RicercaLibro"&gt;
  &lt;soap:operation soapAction=" " /&gt;
&lt;wsdl:input name="RicercaLibroRequest"&gt;
  &lt;soap:body use="literal" /&gt;
&lt;/wsdl:input&gt;
&lt;wsdl:output name="RicercaLibroResponse"&gt;
  &lt;soap:body use="literal" /&gt;
  &lt;/wsdl:output&gt;
  &lt;/wsdl:operation&gt;
  &lt;/wsdl:binding&gt;
&lt;wsdl:service name="LibreriaService"&gt;
&lt;wsdl:port binding="tns:LibreriaSoap11" name="LibreriaSoap11"&gt;
  &lt;soap:address location="http://localhost:10000/libreria/webservice" /&gt;
  &lt;/wsdl:port&gt;
  &lt;/wsdl:service&gt;
  &lt;/wsdl:definitions&gt;</pre><br />
&nbsp;</p>
</div>
<div class="e" style="text-align: justify;"></div>
<ul style="color: #143c5d; text-align: justify;">
<li>La sezione type presenta i tipi e gli elementi definiti nell&#8217;xsd.</li>
<li>La sezione messages presenta tutti i messaggi gestibili dal nostro soa server. La nostra classe ha individuato tanti messaggi quanti sono gli elementi definiti nell&#8217;xsd con suffisso Request e Response</li>
<li>La sezione operation presenta i servizi esposti dal server specificando per ogni servizio il messaggio di ingresso e di uscita.</li>
<li>infine la sezione servizi indica a quale url sono disponibili i nostri servizi.</li>
</ul>
<p style="color: #0d293f; text-align: justify;">Nel nostro caso la classe ha individuato un solo servizio RicercaLibro che riceve in ingresso la RicercaLibroRequest e restituisce in uscita la RicercaLibroResponse. Tale servizio è disponibile all&#8217;url http://localhost:10000/libreria/webservice.</p>
<p style="color: #0d293f; text-align: justify;">Per poter avere un riscontro agevole di quanto fatto possiamo caricare il nostro wsdl tramite il tool <a style="color: #2675b5;" title="Soap Ui" href="http://www.soapui.org/" target="_blank">soap ui</a>, ottimo strumento per il testing dei servizi SOA.</p>
<p style="color: #0d293f; text-align: justify;">Nel prossimo articolo vedremo come mettere in piedi il nostro server con l&#8217;aiuto di spring-ws.</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-2-conoscere-il-wsdl%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%202%20%E2%80%93%20CONOSCERE%20IL%20WSDL" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-2-conoscere-il-wsdl%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%202%20%E2%80%93%20CONOSCERE%20IL%20WSDL" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-2-conoscere-il-wsdl%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%202%20%E2%80%93%20CONOSCERE%20IL%20WSDL" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-2-conoscere-il-wsdl%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%202%20%E2%80%93%20CONOSCERE%20IL%20WSDL" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-2-conoscere-il-wsdl%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%202%20%E2%80%93%20CONOSCERE%20IL%20WSDL" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-2-conoscere-il-wsdl%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%202%20%E2%80%93%20CONOSCERE%20IL%20WSDL" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-2-conoscere-il-wsdl/" data-a2a-title="SPRING WS – TUTORIAL 2 – CONOSCERE IL WSDL"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-2-conoscere-il-wsdl/">SPRING WS – TUTORIAL 2 – CONOSCERE IL WSDL</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SPRING WS &#8211; TUTORIAL 1 &#8211; PRIMA IL CONTRATTO</title>
		<link>http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-1-prima-il-contratto/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 18 Jun 2014 21:35:09 +0000</pubDate>
				<category><![CDATA[SPRING WS]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-ws]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=98</guid>

					<description><![CDATA[<p>Vediamo come usare Spring Ws per la realizzazione di un web service. Spring Ws parte dalla definizione del contratto e solo successivamente affronta il problema dell&#8217;implementazione. Il vantaggio di questo approccio è quello di permettere allo sviluppatore di concentrarsi sul design del servizio e solo successivamente sulla stesura del codice. Scopo di questa serie di &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-1-prima-il-contratto/" class="more-link">Continua la lettura di <span class="screen-reader-text">SPRING WS &#8211; TUTORIAL 1 &#8211; PRIMA IL CONTRATTO</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-1-prima-il-contratto/">SPRING WS – TUTORIAL 1 – PRIMA IL CONTRATTO</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p style="color: rgb(13, 41, 63); text-align: justify;">Vediamo come usare Spring Ws per la realizzazione di un web service.</p>
<p style="color: rgb(13, 41, 63); text-align: justify;">Spring Ws parte dalla definizione del contratto e solo successivamente affronta il problema dell&#8217;implementazione. Il vantaggio di questo approccio è quello di permettere allo sviluppatore di concentrarsi sul design del servizio e solo successivamente sulla stesura del codice.</p>
<p style="color: rgb(13, 41, 63); text-align: justify;">Scopo di questa serie di articoli è la realizzazione di un web service per la ricerca di un libro da un catalogo. La ricerca del libro avviene per titolo o per cognome dell&#8217;autore.</p>
<p style="color: rgb(13, 41, 63); text-align: justify;">Definiamo prima di tutto la struttura dati utilizzata dal web service.</p>
<p style="color: rgb(13, 41, 63); text-align: justify;">Per semplificazione la struttura dati del libro è di questo tipo:</p>
<address>
<pre class="crayon-plain-tag">&lt;complexType name="LibroType"&gt;
&lt;sequence&gt;
&lt;element name="titolo" type="string" maxOccurs="1" minOccurs="1"&gt;&lt;/element&gt;
&lt;element name="nome" type="string" maxOccurs="1" minOccurs="1"&gt;&lt;/element&gt;
&lt;element name="cognome" type="string" maxOccurs="1" minOccurs="1"&gt;&lt;/element&gt;
&lt;/sequence&gt;
&lt;/complexType&gt;</pre><br />
mentre richiesta e risposta hanno questa struttura</p>
</address>
<address>
<pre class="crayon-plain-tag">&lt;element name="RicercaLibroRequest"&gt; 
&lt;complexType&gt; &lt;sequence&gt; &lt;element name="titolo" type="string" maxOccurs="1" minOccurs="0"&gt;&lt;/element&gt; &lt;element name="nome" type="string" maxOccurs="1" minOccurs="0"&gt;&lt;/element&gt; &lt;element name="cognome" type="string" maxOccurs="1" minOccurs="0"&gt;&lt;/element&gt; &lt;/sequence&gt; &lt;/complexType&gt; &lt;/element&gt;
&lt;element name="RicercaLibroResponse"&gt; &lt;complexType&gt; &lt;sequence&gt; &lt;element name="libro" type="string" maxOccurs="unbounded" minOccurs="0"&gt;&lt;/element&gt; &lt;/sequence&gt; &lt;/complexType&gt; 
&lt;/element&gt;</pre><br />
Definite le strutture dati possiamo definire il wsdl, ovvero il file che descrive il web service in modo completo. Usando Spring ws non è necessario farlo a mano, in quanto è disponibile un modulo che a partire dalla struttura dati indicata sopra può generare il file a runtime. Nel prossimo articolo vedremo la struttura del file per ripassare i concetti sul contratto.</p>
</address>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-1-prima-il-contratto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%201%20%E2%80%93%20PRIMA%20IL%20CONTRATTO" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-1-prima-il-contratto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%201%20%E2%80%93%20PRIMA%20IL%20CONTRATTO" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-1-prima-il-contratto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%201%20%E2%80%93%20PRIMA%20IL%20CONTRATTO" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-1-prima-il-contratto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%201%20%E2%80%93%20PRIMA%20IL%20CONTRATTO" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-1-prima-il-contratto%2F&amp;linkname=SPRING%20WS%20%E2%80%93%20TUTORIAL%201%20%E2%80%93%20PRIMA%20IL%20CONTRATTO" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2014%2F06%2Fspring-ws-tutorial-1-prima-il-contratto%2F&#038;title=SPRING%20WS%20%E2%80%93%20TUTORIAL%201%20%E2%80%93%20PRIMA%20IL%20CONTRATTO" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-1-prima-il-contratto/" data-a2a-title="SPRING WS – TUTORIAL 1 – PRIMA IL CONTRATTO"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2014/06/spring-ws-tutorial-1-prima-il-contratto/">SPRING WS – TUTORIAL 1 – PRIMA IL CONTRATTO</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
