{"id":109,"date":"2014-06-18T23:51:03","date_gmt":"2014-06-18T21:51:03","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=109"},"modified":"2014-06-19T00:24:02","modified_gmt":"2014-06-18T22:24:02","slug":"spring-ws-tutorial-5-usare-il-marshalling","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2014\/06\/spring-ws-tutorial-5-usare-il-marshalling\/","title":{"rendered":"SPRING WS &#8211; TUTORIAL 5 &#8211; USARE IL MARSHALLING"},"content":{"rendered":"<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>\n<p style=\"color: #0d293f;\">Tutte le implementazione degli endpoint fornite dal framework prevedono 2 propriet\u00e0:<\/p>\n<ul style=\"color: #143c5d;\">\n<li>marshaller<\/li>\n<li>unmarshaller<\/li>\n<\/ul>\n<div style=\"color: #0d293f;\">Il marshaller \u00e8 responsabile di serializzare l&#8217;oggetto in un frammento xml, mentre l&#8217;unmarsheller effettua l&#8217;operazione contraria.<\/div>\n<div style=\"color: #0d293f;\">Sono previste pi\u00f9 implementazioni dei marsheller, pertanto lo sviluppatore pu\u00f2 scegliere con libert\u00e0 l&#8217;implementazione pi\u00f9 conveniente. Personalmente utilizzo jaxb2 che \u00e8 disponibile a partire da java 6 con la virtual machine.<\/div>\n<div style=\"color: #0d293f;\">Per le altre implementazioni JAXB1, Castor, XMLBEANS rimando alla javadoc disponibile su spring-ws.<\/div>\n<div style=\"color: #0d293f;\">Definiamo il bean che descrive il marshaller e lo settiamo come attributo dell&#8217;endpoint<\/div>\n<div style=\"color: #0d293f;\"><\/div>\n<div>\n<pre class=\"lang:default decode:true \">&lt;bean id=\"jaxb2Marshaller\" class=\"org.springframework.oxm.jaxb.Jaxb2Marshaller\"&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 &lt;property name=\"contextPath\" value=\"it.finazzo.libreria.schema\"\/&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 &lt;property name=\"schema\" value=\"classpath:schema.xsd\"\/&gt;\r\n&lt;\/bean&gt;\r\n&lt;bean id=\"ricercaLibroEndpoint\" class=\"it.finazzo.libreria.ws.RicercaLibroEndpoint\"&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0&lt;property name=\"marshaller\" ref=\"jaxb2Marshaller\"&gt;&lt;\/property&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0&lt;property name=\"unmarshaller\" ref=\"jaxb2Marshaller\"&gt;&lt;\/property&gt;\r\n&lt;\/bean&gt;<\/pre>\n<p>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\u00a0classi possono essere generate in automatico tramite un plugin disponibile per Maven. Per sfruttare questo plugin occorre inserire questo frammento nel pom.xml<\/p>\n<\/div>\n<div>\n<pre class=\"lang:default decode:true\">&lt;plugin&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 &lt;groupId&gt;com.sun.tools.xjc.maven2&lt;\/groupId&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 &lt;artifactId&gt;maven-jaxb-plugin&lt;\/artifactId&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 &lt;executions&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;execution&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;phase&gt;generate-sources&lt;\/phase&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;goals&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;goal&gt;generate&lt;\/goal&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;\/goals&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/execution&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 &lt;\/executions&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 &lt;configuration&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;generatePackage&gt;it.finazzo.libreria.schema&lt;\/generatePackage&gt;\r\n\u00a0\u00a0 \u00a0 \u00a0 &lt;\/configuration&gt;\r\n&lt;\/plugin&gt;<\/pre>\n<p>e definire le resources<\/p>\n<\/div>\n<div>\n<pre class=\"lang:default decode:true \">&lt;resource&gt; \r\n&lt;directory&gt;src\/main\/resources&lt;\/directory&gt; \r\n&lt;filtering&gt;true&lt;\/filtering&gt;\r\n&lt;\/resource&gt;\r\n<\/pre>\n<p>Tale plugin analizza i file xsd disponibili nella directory resource e genera le classi nel package configurato.<\/p>\n<\/div>\n<div style=\"color: #0d293f;\">Infine occorre cambiare l&#8217;implementazione dell&#8217;endpoint estendendo la classe di spring-ws che supporta il marshalling:<\/div>\n<div style=\"color: #0d293f;\"><\/div>\n<div>\n<pre class=\"lang:default decode:true \">public class RicercaLibroEndpoint extends AbstractMarshallingPayloadEndpoint {\r\nprotected Object invokeInternal(Object arg0) throws Exception {\r\nreturn new RicercaLibroResponse();\r\n}\r\n}\r\n<\/pre>\n<p>A questo punto mvn install e proviamo il frutto delle nostre fatiche.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<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\u00e0: marshaller unmarshaller Il marshaller \u00e8 responsabile di serializzare l&#8217;oggetto in un frammento xml, mentre l&#8217;unmarsheller effettua l&#8217;operazione contraria. Sono &hellip; <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\">&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\/109"}],"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=109"}],"version-history":[{"count":2,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/109\/revisions"}],"predecessor-version":[{"id":134,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/109\/revisions\/134"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=109"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}