Android 如何在ksoap2中为具有复杂类型的wcf webservice方法创建soap请求?
我已经使用ksoap2成功地访问了web服务,但是我一直在使用数据契约调用web服务方法 SoapUI中的webservice请求如下所示:Android 如何在ksoap2中为具有复杂类型的wcf webservice方法创建soap请求?,android,web-services,android-ksoap2,Android,Web Services,Android Ksoap2,我已经使用ksoap2成功地访问了web服务,但是我一直在使用数据契约调用web服务方法 SoapUI中的webservice请求如下所示: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:pat="http://schemas.datacontract.org/2004/07/Patie
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tem="http://tempuri.org/"
xmlns:pat="http://schemas.datacontract.org/2004/07/Patient_Service.App_Code.Common">
<soapenv:Header/>
<soapenv:Body>
<tem:PatientLookups>
<tem:oPatientDetails>
<pat:ID>?</pat:ID>
<pat:Name>?</pat:Name>
<pat:Age>?</pat:Age>
<pat:Address>?</pat:Address>
</tem:oPatientDetails>
</tem:PatientLookups>
</soapenv:Body>
如何使用ksoap创建此soap请求?您可以在android中发布服务的datacontract代码并分类患者详细信息吗。看起来它无法将andriod patientdetails对象与服务中的patientdetails相匹配。您可以尝试将默认名称空间从tempuri更改为其他名称空间,这可能会奏效
request=new SoapObject(NAMESPACE,"PatientLookups");
SoapObject sub_element=new SoapObject(NAMESPACE, "oPatientDetails");
for(Map.Entry<String,String> entry: properties.entrySet())
{
PropertyInfo pi=new PropertyInfo();
pi.setNamespace(entityNameSpace);
pi.setName(entry.getKey());
pi.setValue(entry.getValue());
sub_element.addProperty(pi);
}
request.addSoapObject(sub_element);
SoapFault - faultcode: 'a:DeserializationFailed' faultstring: 'The formatter threw an
exception while trying to deserialize the message: There was an error while trying to
deserialize parameter http://tempuri.org/:oPatientDetails. The
InnerException message was 'Error in line 1 position 411. Element
'http://tempuri.org/:oPatientDetails' contains data from a type that
maps to the name 'http://tempuri.org/:oPatientDetails'. The deserializer
has no knowledge of any type that maps to this name. Consider using a
DataContractResolver or add the type corresponding to 'oPatientDetails'
to the list of known types - for example, by using the KnownTypeAttribute attribute or
by adding it to the list of known types passed to DataContractSerializer.'. Please see
InnerException for more details.' faultactor: 'null' detail: null
at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:141)
at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:140)
at org.ksoap2.transport.Transport.parseResponse(Transport.java:100)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:214)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96)