[英]KSoap-Android: Unexpected subelement x, x is expected
我正在使用KSoap for Android ,并且遇到以下问题:调用Web服务时,出现以下错误消息:
SoapFault - faultcode: 'axis2ns5:Client.input.missingOrUnexpectedParameter'
faultstring:
'Unexpected subelement site, site is expected(
callId: 34527, Client.input.missingOrUnexpectedParameter/1.2.2)'
faultactor: 'null' detail: org.kxml2.kdom.Node@7e5db5ae
这是我的请求代码:
SoapObject request = new SoapObject("http://example.com/namespace", "MyService");
request.addProperty("site", "example.org");
request.addProperty("user", "123");
request.addProperty("password", "456");
List<HeaderProperty> headerProperties = new LinkedList<HeaderProperty>();
headerProperties.add(new HeaderProperty("Authorization", "Basic " + org.kobjects.base64.Base64.encode("user:pass".getBytes())));
HttpsTransportSE con = new HttpsTransportSE("example.com", 443, "/myWebService/", 10000);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
con.call("login", envelope, headerProperties);
System.out.println(envelope.bodyIn);
不用管我在site参数和URI中输入的值。
这是我的WSDL(至少是有关登录的部分):
<wsdl:definitions name="MyService" targetNamespace="http://example.com/namespace" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com/namespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<wsdl:types>
<xsd:schema targetNamespace="http://example.com/namespace">
<xsd:element name="loginRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="site" type="xsd:string"/>
<xsd:element name="user" type="xsd:string"/>
<xsd:element name="password" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="loginResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="successful" type="xsd:boolean"/>
<xsd:element minOccurs="0" name="sessionToken" type="xsd:string"/>
<xsd:element minOccurs="0" name="firstTimeUser" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<!-- Snip -->
<wsdl:message name="loginRequest">
<wsdl:part name="parameters" element="tns:loginRequest">
</wsdl:part>
</wsdl:message>
<wsdl:message name="loginResponse">
<wsdl:part name="parameters" element="tns:loginResponse">
</wsdl:part>
</wsdl:message>
<!-- Snip -->
<wsdl:operation name="login">
<wsdl:input message="tns:loginRequest">
</wsdl:input>
<wsdl:output message="tns:loginResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:binding name="MyServiceSOAP" type="tns:MyService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="login">
<soap:operation soapAction="http://example.com/namespace/login"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>
我不是写WSDL的,如果其中有一些错误,那只是我的复制(以及删除与该问题无关的部分)引起的。
那么,为什么会出现上述错误?
要消除该错误,我需要取消注释envelope.dotNet = true
,这是此答案所建议的。 在其他一些问题中建议将其设置为true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.