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
我正在尝试向我的服务器提交 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