|
|
|
![]() |
|
Strumenti |
![]() |
#1 | |||
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
[JAVA] Web Service con axis2
Salve a tutti, sto iniziando a studiare come creare dei web service con axis2 ma mi sto imbattendo in alcuni problemi.
Ho creato la classe che definisce le operazioni rese disponibili dal web service, la classe è la seguente: Codice:
package samples.quickstart.service.pojo; import samples.quickstart.service.pojo.Util.Prodotto; import java.util.*; public class StockQuoteService { private HashMap map = new HashMap (); public double getPrice(String symbol){ Double price = (Double) map.get(symbol); if(price!=null) return price.doubleValue(); return 42.0; } public void update(String symbol, double price){ map.put(symbol, new Double(price)); } public Prodotto[] getCatalogo(){ Prodotto[] catalogo = new Prodotto[map.size()]; Set chiavi = map.keySet(); Iterator it = chiavi.iterator(); for(int i=0; i< chiavi.size(); i++){ String key=(String)it.next(); catalogo[i]= new Prodotto(key, ((Double) map.get(key)).doubleValue()); } return catalogo; } } Detto ciò ho generato il pacchetto aar da installare su tomcat (tramite il tool di eclipse "Axis2 service archive") ed ho installato il web service ottenendo questo file wsdl: Codice:
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://pojo.service.quickstart.samples" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ax21="http://Util.pojo.service.quickstart.samples/xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://pojo.service.quickstart.samples"> <wsdl:documentation>StockQuoteService</wsdl:documentation> <wsdl:types> <xs:schema xmlns:ax22="http://Util.pojo.service.quickstart.samples/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://pojo.service.quickstart.samples"> <xs:import namespace="http://Util.pojo.service.quickstart.samples/xsd"/> <xs:element name="getPrice"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="symbol" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="getPriceResponse"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:double"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="getCatalogoResponse"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax22:Prodotto"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="update"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="symbol" nillable="true" type="xs:string"/> <xs:element minOccurs="0" name="price" type="xs:double"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://Util.pojo.service.quickstart.samples/xsd"> <xs:complexType name="Prodotto"> <xs:sequence> <xs:element minOccurs="0" name="nome" nillable="true" type="xs:string"/> <xs:element minOccurs="0" name="prezzo" type="xs:double"/> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="getPriceRequest"> <wsdl:part name="parameters" element="ns:getPrice"/> </wsdl:message> <wsdl:message name="getPriceResponse"> <wsdl:part name="parameters" element="ns:getPriceResponse"/> </wsdl:message> <wsdl:message name="getCatalogoRequest"/> <wsdl:message name="getCatalogoResponse"> <wsdl:part name="parameters" element="ns:getCatalogoResponse"/> </wsdl:message> <wsdl:message name="updateRequest"> <wsdl:part name="parameters" element="ns:update"/> </wsdl:message> <wsdl:portType name="StockQuoteServicePortType"> <wsdl:operation name="getPrice"> <wsdl:input message="ns:getPriceRequest" wsaw:Action="urn:getPrice"/> <wsdl:output message="ns:getPriceResponse" wsaw:Action="urn:getPriceResponse"/> </wsdl:operation> <wsdl:operation name="getCatalogo"> <wsdl:input message="ns:getCatalogoRequest" wsaw:Action="urn:getCatalogo"/> <wsdl:output message="ns:getCatalogoResponse" wsaw:Action="urn:getCatalogoResponse"/> </wsdl:operation> <wsdl:operation name="update"> <wsdl:input message="ns:updateRequest" wsaw:Action="urn:update"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="StockQuoteServiceSoap11Binding" type="ns:StockQuoteServicePortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <wsdl:operation name="getPrice"> <soap:operation soapAction="urn:getPrice" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="getCatalogo"> <soap:operation soapAction="urn:getCatalogo" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="update"> <soap:operation soapAction="urn:update" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:binding name="StockQuoteServiceSoap12Binding" type="ns:StockQuoteServicePortType"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <wsdl:operation name="getPrice"> <soap12:operation soapAction="urn:getPrice" style="document"/> <wsdl:input> <soap12:body use="literal"/> </wsdl:input> <wsdl:output> <soap12:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="getCatalogo"> <soap12:operation soapAction="urn:getCatalogo" style="document"/> <wsdl:input> <soap12:body use="literal"/> </wsdl:input> <wsdl:output> <soap12:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="update"> <soap12:operation soapAction="urn:update" style="document"/> <wsdl:input> <soap12:body use="literal"/> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:binding name="StockQuoteServiceHttpBinding" type="ns:StockQuoteServicePortType"> <http:binding verb="POST"/> <wsdl:operation name="getPrice"> <http:operation location="StockQuoteService/getPrice"/> <wsdl:input> <mime:content type="text/xml" part="getPrice"/> </wsdl:input> <wsdl:output> <mime:content type="text/xml" part="getPrice"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="getCatalogo"> <http:operation location="StockQuoteService/getCatalogo"/> <wsdl:input> <mime:content type="text/xml" part="getCatalogo"/> </wsdl:input> <wsdl:output> <mime:content type="text/xml" part="getCatalogo"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="update"> <http:operation location="StockQuoteService/update"/> <wsdl:input> <mime:content type="text/xml" part="update"/> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:service name="StockQuoteService"> <wsdl:port name="StockQuoteServiceHttpSoap11Endpoint" binding="ns:StockQuoteServiceSoap11Binding"> <soap:address location="http://192.168.1.2:8080/axis2/services/StockQuoteService.StockQuoteServiceHttpSoap11Endpoint"/> </wsdl:port> <wsdl:port name="StockQuoteServiceHttpSoap12Endpoint" binding="ns:StockQuoteServiceSoap12Binding"> <soap12:address location="http://192.168.1.2:8080/axis2/services/StockQuoteService.StockQuoteServiceHttpSoap12Endpoint"/> </wsdl:port> <wsdl:port name="StockQuoteServiceHttpEndpoint" binding="ns:StockQuoteServiceHttpBinding"> <http:address location="http://192.168.1.2:8080/axis2/services/StockQuoteService.StockQuoteServiceHttpEndpoint"/> </wsdl:port> </wsdl:service> </wsdl:definitions> Quote:
Quando invece provo ad invocare getCatalogo come risposta dal web service ottengo null. Di seguito incollo il client che ho scritto con l'output che mi viene dato: Codice:
import java.rmi.RemoteException; import org.apache.axis2.AxisFault; import test.ws.client.StockQuoteServiceStub; import test.ws.client.StockQuoteServiceStub.GetPrice; import test.ws.client.StockQuoteServiceStub.GetPriceResponse; import test.ws.client.StockQuoteServiceStub.GetCatalogoResponse; import test.ws.client.StockQuoteServiceStub.Prodotto; import test.ws.client.StockQuoteServiceStub.Update; public class X { private StockQuoteServiceStub sqss; public X() throws AxisFault { sqss = new StockQuoteServiceStub(); } public static void main(String[] args) throws RemoteException { X classe = new X(); classe.update("fiat", 50.0); classe.update("opel", 72.2); classe.update("mercedes", 100); System.out.println(classe.getPriceW("fiat")); System.out.println(classe.getPriceW("mercedes")); System.out.println(classe.getPriceW("skoda")); System.out.println(classe.getPriceW("opel")); Prodotto[] ps = classe.getCatalogo(); for(int i=0; i<ps.length; i++) System.out.println("Catalogo"+ps[i].getNome()+", "+ps[i].getPrezzo()); } public double getPriceW(String nome) throws RemoteException{ GetPrice parametro = new GetPrice(); parametro.setSymbol(nome); GetPriceResponse grp = sqss.getPrice(parametro); return grp.get_return(); } public void update(String nome, double prezzo) throws RemoteException{ Update imp = new Update(); imp.setSymbol(nome); imp.setPrice(prezzo); sqss.update(imp); } public Prodotto[] getCatalogo() throws RemoteException{ GetCatalogoResponse risposta = sqss.getCatalogo(); Prodotto[] catalogo = risposta.get_return(); return catalogo; } } Quote:
Perchè un comportamento simile? Cosa sbaglio? Un'ultima cosa, per generare le classi stub ho installato anche il plug-in per eclipse di axis2 (Axis2 code generator), ma questo tool a quanto ho potuto notare non mi funziona mai e non mi da mai nessun file in output mi da un messaggio d'errore: Quote:
Grazie a tutti. Ciao ciao |
|||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:46.