{"id":100,"date":"2014-06-18T23:37:14","date_gmt":"2014-06-18T21:37:14","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=100"},"modified":"2014-06-19T00:26:00","modified_gmt":"2014-06-18T22:26:00","slug":"spring-ws-tutorial-2-conoscere-il-wsdl","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2014\/06\/spring-ws-tutorial-2-conoscere-il-wsdl\/","title":{"rendered":"SPRING WS &#8211; TUTORIAL 2 &#8211; CONOSCERE IL WSDL"},"content":{"rendered":"<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>\n<p style=\"color: #0d293f; text-align: justify;\">La classe da utilizzare \u00e8 la DefaultWsdl11Definition<\/p>\n<pre class=\"lang:default decode:true crayon-selected\">&lt;bean id=\"libreria\" class=\"org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition\"&gt;\r\n   &lt;property name=\"schema\"&gt;\r\n     &lt;bean class=\"org.springframework.xml.xsd.SimpleXsdSchema\"&gt;\r\n       &lt;property name=\"xsd\" value=\"\/WEB-INF\/libreria.xsd\"\/&gt;\r\n     &lt;\/bean&gt;\r\n   &lt;\/property&gt;\r\n   &lt;property name=\"portTypeName\" value=\"Libreria\"\/&gt;\r\n   &lt;property name=\"locationUri\" value=\"http:\/\/localhost:10000\/libreria\/services\"\/&gt;\r\n &lt;\/bean&gt;<\/pre>\n<ul style=\"color: #143c5d; text-align: justify;\">\n<li>L&#8217;attributo id determina il nome del wsdl. In questo caso esporr\u00e0 il wsdl libreria.wsdl<\/li>\n<li>La propriet\u00e0 schema indica il file da utilizzare per la generazione del file wsdl<\/li>\n<li>le propriet\u00e0 portTypeName e locationUri indicano i parametri da inserire all&#8217;interno del wsdl per la richiesta dei servizi.<\/li>\n<\/ul>\n<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>\n<div style=\"color: #0d293f; text-align: justify;\">Nel nostro caso il wsdl generato ha la seguente forma<\/div>\n<div style=\"color: #0d293f; text-align: justify;\"><\/div>\n<div class=\"e\" style=\"text-align: justify;\">\n<pre class=\"lang:default decode:true \">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?&gt;\r\n&lt;wsdl:definitions xmlns:wsdl=\"http:\/\/schemas.xmlsoap.org\/wsdl\/\"\u00a0\r\nxmlns:sch=\"http:\/\/www.example.org\/schema\"\u00a0\r\nxmlns:soap=\"http:\/\/schemas.xmlsoap.org\/wsdl\/soap\/\"\r\n\u00a0 xmlns:tns=\"http:\/\/www.example.org\/schema\" targetNamespace=\"http:\/\/www.example.org\/schema\"&gt;\r\n&lt;wsdl:types&gt;\u00a0\r\n\u00a0 &lt;schema xmlns=\"http:\/\/www.w3.org\/2001\/XMLSchema\" attributeFormDefault=\"unqualified\"\u00a0\r\n\u00a0 elementFormDefault=\"qualified\" targetNamespace=\"http:\/\/www.example.org\/schema\"&gt;\r\n&lt;complexType name=\"LibroType\"&gt;\r\n&lt;sequence&gt;\r\n\u00a0 &lt;element name=\"titolo\" type=\"string\" \/&gt;\r\n&lt;element name=\"nome\" type=\"string\" \/&gt;\u00a0\r\n&lt;element name=\"cognome\"type=\"string\" \/&gt;\u00a0\r\n&lt;\/sequence&gt;\r\n\u00a0 &lt;\/complexType&gt;\r\n&lt;element name=\"RicercaLibroRequest\"&gt;\r\n&lt;complexType&gt;\r\n&lt;sequence&gt;\r\n\u00a0 &lt;element minOccurs=\"0\" name=\"titolo\" type=\"string\" \/&gt;\r\n\u00a0 &lt;element minOccurs=\"0\" name=\"nome\" type=\"string\" \/&gt;\r\n\u00a0 &lt;element minOccurs=\"0\" name=\"cognome\" type=\"string\" \/&gt;\r\n&lt;\/sequence&gt;\r\n&lt;\/complexType&gt;\r\n&lt;\/element&gt;\r\n&lt;element name=\"RicercaLibroResponse\"&gt;\r\n&lt;complexType&gt;\r\n&lt;sequence&gt;\r\n\u00a0 &lt;element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"libro\" type=\"string\" \/&gt;\r\n&lt;\/sequence&gt;\r\n\u00a0 &lt;\/complexType&gt;\r\n&lt;\/element&gt;\r\n&lt;\/schema&gt;\r\n&lt;\/wsdl:types&gt;\r\n&lt;wsdl:message name=\"RicercaLibroResponse\"&gt;\r\n\u00a0 &lt;wsdl:part element=\"tns:RicercaLibroResponse\" name=\"RicercaLibroResponse\" \/&gt;\r\n\u00a0 &lt;\/wsdl:message&gt;\r\n&lt;wsdl:message name=\"RicercaLibroRequest\"&gt;\r\n\u00a0 &lt;wsdl:part element=\"tns:RicercaLibroRequest\" name=\"RicercaLibroRequest\" \/&gt;\r\n\u00a0 &lt;\/wsdl:message&gt;\r\n&lt;wsdl:portType name=\"Libreria\"&gt;\r\n&lt;wsdl:operation name=\"RicercaLibro\"&gt;\r\n\u00a0 &lt;wsdl:input message=\"tns:RicercaLibroRequest\" name=\"RicercaLibroRequest\" \/&gt;\r\n\u00a0 &lt;wsdl:output message=\"tns:RicercaLibroResponse\" name=\"RicercaLibroResponse\" \/&gt;\r\n\u00a0 &lt;\/wsdl:operation&gt;\r\n\u00a0 &lt;\/wsdl:portType&gt;\r\n&lt;wsdl:binding name=\"LibreriaSoap11\" type=\"tns:Libreria\"&gt;\r\n&lt;soap:binding style=\"document\" transport=\"http:\/\/schemas.xmlsoap.org\/soap\/http\" \/&gt;\r\n&lt;wsdl:operation name=\"RicercaLibro\"&gt;\r\n\u00a0 &lt;soap:operation soapAction=\"\u00a0\" \/&gt;\r\n&lt;wsdl:input name=\"RicercaLibroRequest\"&gt;\r\n\u00a0 &lt;soap:body use=\"literal\" \/&gt;\r\n&lt;\/wsdl:input&gt;\r\n&lt;wsdl:output name=\"RicercaLibroResponse\"&gt;\r\n\u00a0 &lt;soap:body use=\"literal\" \/&gt;\r\n\u00a0 &lt;\/wsdl:output&gt;\r\n\u00a0 &lt;\/wsdl:operation&gt;\r\n\u00a0 &lt;\/wsdl:binding&gt;\r\n&lt;wsdl:service name=\"LibreriaService\"&gt;\r\n&lt;wsdl:port binding=\"tns:LibreriaSoap11\" name=\"LibreriaSoap11\"&gt;\r\n\u00a0 &lt;soap:address location=\"http:\/\/localhost:10000\/libreria\/webservice\" \/&gt;\r\n\u00a0 &lt;\/wsdl:port&gt;\r\n\u00a0 &lt;\/wsdl:service&gt;\r\n\u00a0 &lt;\/wsdl:definitions&gt;<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<div class=\"e\" style=\"text-align: justify;\"><\/div>\n<ul style=\"color: #143c5d; text-align: justify;\">\n<li>La sezione type presenta i tipi e gli elementi definiti nell&#8217;xsd.<\/li>\n<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>\n<li>La sezione operation presenta i servizi esposti dal server specificando per ogni servizio il messaggio di ingresso e di uscita.<\/li>\n<li>infine la sezione servizi indica a quale url sono disponibili i nostri servizi.<\/li>\n<\/ul>\n<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 \u00e8 disponibile all&#8217;url http:\/\/localhost:10000\/libreria\/webservice.<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">Per poter avere un riscontro agevole di quanto fatto possiamo caricare il nostro wsdl tramite il tool\u00a0<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>\n<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>\n","protected":false},"excerpt":{"rendered":"<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 \u00e8 la DefaultWsdl11Definition &lt;bean id=&#8221;libreria&#8221; class=&#8221;org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition&#8221;&gt; &lt;property name=&#8221;schema&#8221;&gt; &lt;bean class=&#8221;org.springframework.xml.xsd.SimpleXsdSchema&#8221;&gt; &lt;property name=&#8221;xsd&#8221; value=&#8221;\/WEB-INF\/libreria.xsd&#8221;\/&gt; &lt;\/bean&gt; &lt;\/property&gt; &lt;property name=&#8221;portTypeName&#8221; value=&#8221;Libreria&#8221;\/&gt; &lt;property name=&#8221;locationUri&#8221; value=&#8221;http:\/\/localhost:10000\/libreria\/services&#8221;\/&gt; &lt;\/bean&gt; &hellip; <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\">&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\/100"}],"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=100"}],"version-history":[{"count":2,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/100\/revisions"}],"predecessor-version":[{"id":137,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/100\/revisions\/137"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}