Autore Topic: Chiamata a web service  (Letto 805 volte)

Offline pandrea81

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Chiamata a web service
« il: 29 Maggio 2012, 15:14:26 CEST »
0
Salve a tutti,
ho un web service axis2 in java che ha un solo metodo che restituisce il parametro passato alla funzione.

Codice (Java): [Seleziona]
public class passaggio {

    /**
     * @param args the command line arguments
     */

    public String passa(String s){
        String a;
        a=s;
        return a;

    }

E' stato pubblicato con axis2 questo e' il wsdl:

Codice (XML): [Seleziona]
<wsdl:definitions targetNamespace="http://javaapplication55"><wsdl:documentation>passaggio</wsdl:documentation><wsdl:types><xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://javaapplication55/xsd"><xs:element name="passa"><xs:complexType><xs:sequence><xs:element name="s" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="passaResponse"><xs:complexType><xs:sequence><xs:element name="return" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element></xs:schema></wsdl:types><wsdl:message name="passaMessage"><wsdl:part name="part1" element="ns0:passa"/></wsdl:message><wsdl:message name="passaResponse"><wsdl:part name="part1" element="ns0:passaResponse"/></wsdl:message><wsdl:portType name="passaggioPortType"><wsdl:operation name="passa"><wsdl:input message="axis2:passaMessage" wsaw:Action="urn:passa"/><wsdl:output message="axis2:passaResponse"/></wsdl:operation></wsdl:portType><wsdl:binding name="passaggioSOAP11Binding" type="axis2:passaggioPortType"><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><wsdl:operation name="passa"><soap:operation soapAction="urn:passa" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:binding name="passaggioSOAP12Binding" type="axis2:passaggioPortType"><soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><wsdl:operation name="passa"><soap12:operation soapAction="urn:passa" style="document"/><wsdl:input><soap12:body use="literal"/></wsdl:input><wsdl:output><soap12:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:binding name="passaggioHttpBinding" type="axis2:passaggioPortType"><http:binding verb="POST"/><wsdl:operation name="passa"><http:operation location="passa"/><wsdl:input><mime:content type="text/xml"/></wsdl:input><wsdl:output><mime:content type="text/xml"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="passaggio"><wsdl:port name="passaggioSOAP11port_http" binding="axis2:passaggioSOAP11Binding"><soap:address location="http://192.168.0.111:8080/axis2/services/passaggio"/></wsdl:port><wsdl:port name="passaggioSOAP12port_http" binding="axis2:passaggioSOAP12Binding"><soap12:address location="http://192.168.0.111:8080/axis2/services/passaggio"/></wsdl:port><wsdl:port name="passaggioHttpport" binding="axis2:passaggioHttpBinding"><http:address location="http://192.168.0.111:8080/axis2/services/passaggio"/></wsdl:port></wsdl:service></wsdl:definitions>
e questo e' il codice (android 2.1):

Codice (Java): [Seleziona]
import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.os.Bundle;

public class ProvaunoActivity extends Activity {

        private static final String METHOD_NAME = "passa";
        private static final String NAMESPACE = "http://192.168.0.111:8080/axis2/services/passaggio";
        private static final String SOAP_ACTION = "http://192.168.0.111:8080/axis2/services/passaggio/passa";
        private static final String URL = "http://192.168.0.111:8080/axis2/services/passaggio?wsdl";

       
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        SoapObject data = new SoapObject(NAMESPACE, METHOD_NAME);
       
        PropertyInfo pi=new PropertyInfo();
       
        pi.setName("s");
        pi.setValue("andrea");
       
        data.addProperty(pi);
         
        /*richiesta al web service*/
       
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
       
        envelope.dotNet = true;
        envelope.setAddAdornments(false);
        envelope.implicitTypes=true;
       
        envelope.setOutputSoapObject(data);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.debug=true;
       

        try {
                        androidHttpTransport.call(SOAP_ACTION, envelope);
                        System.out.println("richiesta: "+androidHttpTransport.requestDump);
                       
                } catch (IOException e) {
                        e.printStackTrace();
                } catch (XmlPullParserException e) {
                        e.printStackTrace();
                }
        System.out.println(androidHttpTransport.responseDump);
}
}


La richiesta viene stamapata così:

Codice (XML): [Seleziona]
richiesta: <v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /><v:Body><passa xmlns="http://192.168.0.111:8080/axis2/services/passaggio"><s i:type="d:string">andrea</s></passa></v:Body></v:Envelope>
e così la risposta:

Codice (XML): [Seleziona]
 <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Client</faultcode><faultstring>Exception occurred while trying to invoke service method passa</faultstring><detail /></soapenv:Fault></soapenv:Body></soapenv:Envelope>
L'errore sembra essere sull'invocazione del metodo. Ho fatto un esempio simile senza passaggio parametri che restituisce una stringa e funziona.

Offline pandrea81

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Re:Chiamata a web service
« Risposta #1 il: 30 Maggio 2012, 12:19:35 CEST »
0
Ho risolto: a parte il namespace che era sbagliato il problema piu' grosso e che avevo una versione di axis 1.4 e aggiornandola alla 1.6 il problema e' sparito. Quindi il web service dev essere fatto con versioni aggiornate di axis per poter funzionare con android.