У меня были подобные проблемы в прошлом.Я приведу вам пример части, которую мне пришлось исправить в моем приложении, и как я это сделал, проверьте, выполнили ли вы следующие шаги в вашем случае:
В wsdl было:
<message name="invokeService">
<part name="serviceName" type="xsd:string"/>
<part name="documents" type="tns:uriList"/>
<part name="literalDocs" type="ns1:stringArray"/>
<part name="connID" type="xsd:long"/>
<part name="gateParams" type="tns:gateRuntimeParameterArray"/>
<part name="userCtx" type="tns:userContext"/>
</message>
Поэтому мне пришлось выполнить следующие шаги:
1 - проверить, точно ли определены ваши классы, реализующие KvmSerializable, и ничего не пропущено (это крусия для сложных типов)
2-Add ALLнеобходимые свойства объекта мыла, которые вам нужны, например, в моем случае:
//for the part: <part name="serviceName" type="xsd:string"/>
SoapObject.addProperty("serviceName", whateverServiceNameItWas);
//for the part: <part name="documents" type="tns:uriList"/>,where uriList was a complex type
PropertyInfo pi = new PropertyInfo();
pi.setName("documents");
pi.setValue(usrOptPr.getDocuments());
pi.setType(UriList.class);
sobj.addProperty(pi);
и т. д. * 3-Создайте конверт:
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.setOutputSoapObject(SoapObject);
4 - Добавить сопоставления между сложными типами (т. Е. Локальным классом, реализующим kvmserializable, и реальными классами сопоставления в веб-сервисе)
//---------------------------------------------------------------------------------------
// MAPPINGS:
// A mapping tells the ksoap what class to generate.
// Complex data types that are not mapped are generated as SoapObjects.
// The mapping is required for both the request and the response.
//---------------------------------------------------------------------------------------
//for example the UriList above
soapEnvelope.addMapping(theNamespace, UriList.class.getSimpleName(), UriList.class);
5 - Добавить маршаллинг: (Маршаллинг использует сериализацию Java для изменения объектов наПоток данных, которые будут распакованы в веб-сервисе.)
Marshal floatMarshal = new MarshalFloat();
floatMarshal.register(soapEnvelope);
6- Используйте AndroidHttpTransport для вызова веб-сервиса
ОБНОВЛЕНИЕ
Я также заметил, что у вас есть взапрос браузера:
<d4p1:Schools i:nil="true" />
В то время как в Android:
<Schools i:type="d:string"></Schools>
Иногда при таком сценарии возникают ошибки ksoap2, у меня был такой же случай, поэтому я просто удалил (закомментировал, так как он допускает ноль, то есть нулевые значения)этот параметр (т.е. школы) из своего конкретного класса, который реализует kvmserializable (конечно, вам придется изменить другие вещи в классе, такие как «getPropertyCount» и «getPropertyInfo», чтобы адаптироваться к этому изменению).Когда я сделал это, это сработало, так что попробуйте и дайте мне знать.