|
|||||||
|
|
|
![]() |
|
|
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: 15:26.



















