kSOAP2 错误

Error with kSOAP2

我正在尝试向我的服务器提交 phone 的用户名和设备 ID,但我不断收到以下错误:

W/System.err﹕ SoapFault - faultcode: 'soap:Client' faultstring: 'Unmarshalling Error: unexpected element (uri:"http://eventmanagement.management.de/", local:"username"). Expected elements are <{}deviceID>,<{}username> ' faultactor: 'null' detail: null

这是我的代码:

       PropertyInfo pi = new PropertyInfo();
       pi.setNamespace(NAMESPACE);
       pi.setName("username");
       pi.setValue(userName.getText().toString());
       pi.setType(PropertyInfo.STRING_CLASS);
       request.addProperty(pi); 
       pi.setNamespace(NAMESPACE);
       pi.setName("deviceID");

       pi.setValue(android.provider.Settings.Secure.getString(
       getContentResolver(), 
       android.provider.Settings.Secure.ANDROID_ID));
       pi.setType(PropertyInfo.STRING_CLASS);
       request.addProperty(pi);

        SoapSerializationEnvelope envelope = 
         new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

这是 wsdl 文件:

 <xs:complexType name="addUser">
   <xs:sequence>
    <xs:element minOccurs="0" name="username" type="xs:string"/>
    <xs:element minOccurs="0" name="deviceID" type="xs:string"/>
   </xs:sequence>
  </xs:complexType>

有人可以帮我吗? 我找了2个小时,一无所获。

编辑2: 左上角的 http-Request 转储 右上角的 SoapUI 生成的请求有效 http://www.directupload.net/file/d/4013/5iwbvowk_png.htm

您应该记得在添加第一个后将 属性 声明为新的。

pi = new PropertyInfo();

   PropertyInfo pi = new PropertyInfo();
   pi.setNamespace(NAMESPACE);
   pi.setName("username");
   pi.setValue(userName.getText().toString());
   pi.setType(PropertyInfo.STRING_CLASS);
   request.addProperty(pi); 

   // here
   pi = new PropertyInfo();  
   pi.setNamespace(NAMESPACE);
   pi.setName("deviceID");
   pi.setValue(android.provider.Settings.Secure.getString(
   getContentResolver(), 
   android.provider.Settings.Secure.ANDROID_ID));
   pi.setType(PropertyInfo.STRING_CLASS);
   request.addProperty(pi);

还有一件事,记得调用你的 androidHttpTransport

androidHttpTransport.call(SOAP_ACTION,envelope,null);
SoapPrimitive respond = (SoapPrimitive) envelope.getResponse();

更新: 您的请求是否传递了您想要的确切参数?调试的时候,可以看到你传入的值名和参数的webservice名。

ConnectionString{username=manager; password=password123; }

您是否尝试过简单地添加 属性 使用下面的 addProperty

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("username", username);
request.addProperty("deviceID", deviceID);

此外,您可以确保您有一个有效的值,并且在访问 userName.getText().toString()

时没有点击任何 NPE