2016-06-01 17 views
1

Ich habe einen Soap-Server in Python mit Spyne geschrieben. Ich habe auch einen Soap-Client in Python mit Suds erstellt. Es funktioniert perfekt. Hier ist der Code für den ServerFehler beim Verbinden von kSoap mit Spyne Das Attribut '{http://schemas.xmlsoap.org/soap/encoding/}root' ist nicht erlaubt

class Personnel(ServiceBase): 

@rpc(_returns=String) 
def personnel(self): 
    """Docstrings for service methods appear as documentation in the wsdl. 
    <b>What fun!</b> 

    @param name the name to say hello to 
    @param times the number of times to say hello 
    @return the completed array 
    """ 
    employees_list = employees() 
    employees_list.populate_from_db("elleo", "odoo", "0801", "127.0.0.1") 

    tstString = "Dirk" 

    return tstString 

application = Application([Personnel], 'elleo.personnel', 
        in_protocol=Soap11(validator='lxml'), 
        out_protocol=Soap11()) 

wsgi_application = WsgiApplication(application) 

Wenn ich mit meinem Android-Programm mit KSOAP verbinden, bekomme ich einen Fehler. Hier ist der Code:

String SOAP_ACTION = "http://192.168.1.100:8000/personnel"; 
    String METHOD_NAME = "personnel"; 
    String NAMESPACE = "elleo.personnel"; 
    String URL = "http://192.168.1.100:8000/?wsdl"; 


    try { 
     SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 

     SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     soapEnvelope.dotNet = true; 
     soapEnvelope.setOutputSoapObject(Request); 
     HttpTransportSE transport = new HttpTransportSE(URL); 

     transport.call(SOAP_ACTION, soapEnvelope); 
     resultString = (SoapPrimitive) soapEnvelope.getResponse(); 

     Log.i(TAG, "Result Celsius: " + resultString); 
    } catch (Exception ex) { 
     Log.e(TAG, "Error: " + ex.getMessage()); 
    } 

bekomme ich folgende Fehlermeldung:

<faultstring>:1:0:ERROR:SCHEMASV:SCHEMAV_CVC_COMPLEX_TYPE_3_2_1: Element '{elleo.personnel}personnel', attribute '{http://schemas.xmlsoap.org/soap/encoding/}root': The attribute '{http://schemas.xmlsoap.org/soap/encoding/}root' is not allowed.</faultstring> 

Jede Idee, wie diese zu lösen. Dies ist nur ein kleines Programm, das ich benutze, um die Kommunikation herzustellen. Ich werde das Programm erweitern, wenn dieser Teil funktioniert.

Antwort

1

Ich fand die Antwort. Ich behaupte nicht zu verstehen, warum es funktioniert, aber es hat getan. Weitere Informationen finden Sie unter How can you remove namespace declarations in ksoap?. Hier

ist der Code, den ich zu meinem Java-Programm hinzugefügt:

try { 
    SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 

    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    soapEnvelope.dotNet = true; 
    soapEnvelope.setOutputSoapObject(Request); 
    soapEnvelope.setAddAdornments(false); 
    HttpTransportSE transport = new HttpTransportSE(URL); 

    transport.call(SOAP_ACTION, soapEnvelope); 
    resultString = (SoapPrimitive) soapEnvelope.getResponse(); 

    Log.i(TAG, "Result Celsius: " + resultString); 
} catch (Exception ex) { 
    Log.e(TAG, "Error: " + ex.getMessage()); 
}