在ksoap2 android中找不到类型错误的反序列化程序
我想在android中使用ksoap2向web服务发送一个类作为参数。 这是我在android中的代码:在ksoap2 android中找不到类型错误的反序列化程序,android,web-services,ksoap2,Android,Web Services,Ksoap2,我想在android中使用ksoap2向web服务发送一个类作为参数。 这是我在android中的代码: public Object simpleConnect() { SoapObject request = new SoapObject(namespace, methodName); Foo para = new Foo(); para.setFooId(2333222); para.setCompanyId(12); para.setField2(
public Object simpleConnect() {
SoapObject request = new SoapObject(namespace, methodName);
Foo para = new Foo();
para.setFooId(2333222);
para.setCompanyId(12);
para.setField2(true);
para.setField3(2);
para.setPrimaryKey(765);
para.setUserId(987);
request.addProperty("param", para);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.addMapping(namespace, "Foo", Foo.class);
HttpTransportSE ht = new HttpTransportSE(url);
try {
ht.call(soapAction, envelope);
return envelope.getResponse(); //got error deserialize in this line
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
这是我的服务中我尝试调用的方法:
public Foo addObjFoo(Foo param) throws SystemException {
System.out.println("something");
fooPersistence.update(param, false);
return param;
}
这是我的wsdl:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="urn:http.service.test.com" xmlns:intf="urn:http.service.test.com" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://model.test.com" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:http.service.test.com">
<!--WSDL created by Apache Axis version: 1.4Built on Apr 22, 2006 (06:55:48 PDT)-->
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://model.test.com">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="FooSoap">
<sequence>
<element name="companyId" type="xsd:long"/>
<element name="field2" type="xsd:boolean"/>
<element name="field3" type="xsd:int"/>
<element name="fooId" type="xsd:long"/>
<element name="primaryKey" type="xsd:long"/>
<element name="userId" type="xsd:long"/>
</sequence>
</complexType>
</schema>
</wsdl:types>
<wsdl:message name="addFooResponse">
<wsdl:part name="addFooReturn" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="printmessageRequest">
<wsdl:part name="behi" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="addFooRequest">
<wsdl:part name="para" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="printmessageResponse">
<wsdl:part name="printmessageReturn" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="addObjFooResponse">
<wsdl:part name="addObjFooReturn" type="tns1:FooSoap"/>
</wsdl:message>
<wsdl:message name="addObjFooRequest">
<wsdl:part name="param" type="xsd:anyType"/>
</wsdl:message>
<wsdl:portType name="FooServiceSoap">
<wsdl:operation name="addFoo" parameterOrder="para">
<wsdl:input message="impl:addFooRequest" name="addFooRequest"/>
<wsdl:output message="impl:addFooResponse" name="addFooResponse"/>
</wsdl:operation>
<wsdl:operation name="addObjFoo" parameterOrder="param">
<wsdl:input message="impl:addObjFooRequest" name="addObjFooRequest"/>
<wsdl:output message="impl:addObjFooResponse" name="addObjFooResponse"/>
</wsdl:operation>
<wsdl:operation name="printmessage" parameterOrder="behi">
<wsdl:input message="impl:printmessageRequest" name="printmessageRequest"/>
<wsdl:output message="impl:printmessageResponse" name="printmessageResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="Plugin_obtice_FooServiceSoapBinding" type="impl:FooServiceSoap">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="addFoo">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="addFooRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:http.service.test.com" use="encoded"/>
</wsdl:input>
<wsdl:output name="addFooResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:http.service.test.com" use="encoded"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="addObjFoo">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="addObjFooRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:http.service.test.com" use="encoded"/>
</wsdl:input>
<wsdl:output name="addObjFooResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:http.service.test.com" use="encoded"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="printmessage">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="printmessageRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:http.service.test.com" use="encoded"/>
</wsdl:input>
<wsdl:output name="printmessageResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:http.service.test.com" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="FooServiceSoapService">
<wsdl:port binding="impl:Plugin_obtice_FooServiceSoapBinding" name="Plugin_obtice_FooService">
<wsdlsoap:address location="http://localhost:8080/WebService-portlet/axis/Plugin_obtice_FooService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我在调用web服务并获取响应后出现此错误:
SoapFault - faultcode: 'soapenv:Server.userException' faultstring: 'org.xml.sax.SAXException: Deserializing parameter 'param': could not find deserializer for type {urn:http.service.test.com/}Foo' faultactor: 'null' detail: org.kxml2.kdom.Node@4057bb40
请帮帮我。我完全坚持下去了
谢谢…我收到了同样的错误消息,我想弄明白这一点,简直快疯了 在传输呼叫之前添加此行
androidHttpTransport.debug = true;
这两个人在电话之后呢
Log.i(REQUEST, androidHttpTransport.requestDump);
Log.i(RESPONSE, androidHttpTransport.responseDump);
查看您在信封中发送的Foo的类型,并确保它与WSDL中声明的类型匹配
在我的项目中,信封映射
envelope.addMapping(namespace, "GetFacilityReservations",GetFacilityReservations.class);
正在以n0类型发送我的自定义类,因为这是我最初声明的命名空间的类型。但我的班级是另一种类型
因此,我所需要做的就是将映射中的名称空间更改为正确的名称空间
envelope.addMapping("urn:XPressLocate", "GetFacilityReservations",GetFacilityReservations.class);
envelope.addMapping("urn:XPressLocate", "GetFacilityReservations",GetFacilityReservations.class);