{"id":104,"date":"2014-06-18T23:46:46","date_gmt":"2014-06-18T21:46:46","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=104"},"modified":"2014-06-19T00:24:35","modified_gmt":"2014-06-18T22:24:35","slug":"spring-ws-tutorial-4-mapping-dei-servizi","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2014\/06\/spring-ws-tutorial-4-mapping-dei-servizi\/","title":{"rendered":"SPRING WS &#8211; TUTORIAL 4 &#8211; MAPPING DEI SERVIZI"},"content":{"rendered":"<p style=\"color: #0d293f; text-align: justify;\">Nell&#8217;articolo di oggi vedremo come mappare i servizi e gestire la loro implementazione.<\/p>\n<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>\n<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>\n<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>\n<pre class=\"lang:default decode:true\">&lt;dependency&gt;\r\n&lt;groupId&gt;jdom&lt;\/groupId&gt;\r\n&lt;artifactId&gt;jdom&lt;\/artifactId&gt;\t\r\n&lt;version&gt;1.0&lt;\/version&gt;\t\r\n&lt;\/dependency&gt;\t    \r\n&lt;dependency&gt;\t        \r\n&lt;groupId&gt;jaxen&lt;\/groupId&gt;\t        \r\n&lt;artifactId&gt;jaxen&lt;\/artifactId&gt;\t        \r\n&lt;version&gt;1.1&lt;\/version&gt;\t    \r\n&lt;\/dependency&gt;\t    \r\n&lt;dependency&gt;\t        \r\n&lt;groupId&gt;javax.xml.soap&lt;\/groupId&gt;\t        \r\n&lt;artifactId&gt;saaj-api&lt;\/artifactId&gt;\t        \r\n&lt;version&gt;1.3&lt;\/version&gt;\t        \r\n&lt;scope&gt;runtime&lt;\/scope&gt;\t    \r\n&lt;\/dependency&gt;\t    \r\n&lt;dependency&gt;\t        \r\n&lt;groupId&gt;com.sun.xml.messaging.saaj&lt;\/groupId&gt;\t        \r\n&lt;artifactId&gt;saaj-impl&lt;\/artifactId&gt;\t        \r\n&lt;version&gt;1.3&lt;\/version&gt;\t        \r\n&lt;scope&gt;runtime&lt;\/scope&gt;\t    \r\n&lt;\/dependency&gt;<\/pre>\n<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>\n<pre class=\"lang:default decode:true\">&lt;bean id=\"ricercaLibroEndpoint\" class=\"it.finazzo.libreria.ws.RicercaLibroEndpoint\"\/&gt;<\/pre>\n<p style=\"color: #0d293f; text-align: justify;\">Tale classe estende la classe di Spring che gestisce l&#8217;integrazione con JDOM<\/p>\n<pre style=\"color: #0d293f;\">public class RicercaLibroEndpoint extends AbstractJDomPayloadEndpoint {\r\n\tprotected Element invokeInternal(Element arg0) throws Exception {\t\treturn null;\r\n\t}\r\n}<\/pre>\n<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>\n<div style=\"text-align: justify;\">\n<pre class=\"lang:default decode:true\">&lt;bean \r\nclass=\"org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping\"&gt;\r\n&lt;property name=\"mappings\"&gt;\r\n&lt;props&gt;\r\n&lt;prop key=\"{http:\/\/www.example.org\/schema}RicercaLibroRequest\"&gt;\r\nricercaLibroEndpoint\r\n&lt;\/prop&gt;\r\n&lt;\/props&gt;\r\n&lt;\/property&gt;\r\n&lt;\/bean&gt;<\/pre>\n<p>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>\n<\/div>\n<ul style=\"color: #143c5d; text-align: justify;\">\n<li><span style=\"color: #000000;\">PayloadRootQNameEndpointMapping<\/span><\/li>\n<li><span style=\"color: #000000;\">SoapActionEndpointMapping<\/span><\/li>\n<\/ul>\n<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 \u00e8 pi\u00f9 lento ma \u00e8 indipendente dalla specifica SOA e pertanto pu\u00f2 essere usato sia in caso di SOA 1.1, 1.2 o qualsiasi altro livello di trasporto.<\/p>\n<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 \u00e8 pi\u00f9 veloce ma \u00e8 valido solo con la SOA 1.1, poich\u00e8 nella SOA 1.2 tale parametro \u00e8 stato reso deprecato.<\/p>\n<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>\n","protected":false},"excerpt":{"rendered":"<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, &hellip; <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\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20],"tags":[21,22],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/104"}],"collection":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/comments?post=104"}],"version-history":[{"count":5,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/104\/revisions"}],"predecessor-version":[{"id":135,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/104\/revisions\/135"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=104"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}