У меня проблемы с созданием правильного запроса на SOAP WS от Android с использованием ksoap2-android и устройства Android v7.0.Я подключаюсь к услуге, но в ответе говорится, что в запросе нет данных.Я использовал SoapUI для проверки запроса и ответа, и он работал без проблем.Вот запрос, который я использую в SoapUI (некоторые данные опущены из-за NDA):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bus="http://path/to/file/busWS.wsdl">
<soapenv:Header/>
<soapenv:Body>
<bus:synchronizeTime>
<synchronizeTimeRequest>
<bus-terminal>
<BusCode>1</BusCode>
<TerminalCode>1</TerminalCode>
<CompanyCode>1</CompanyCode>
<BusID>1</BusID>
<TerminalID>1</TerminalID>
<CompanyID>1</CompanyID>
<VersionCode>1</VersionCode>
<FilesVersion>1</FilesVersion>
<NSerie>1</NSerie>
<Signal>1</Signal>
<Downloaded>1</Downloaded>
<ProtocolVersion>1</ProtocolVersion>
</bus-terminal>
</synchronizeTimeRequest>
</bus:synchronizeTime>
</soapenv:Body>
</soapenv:Envelope>
И это также ответ в SoapUI:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:bus="http://path/to/file/busWS.wsdl">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<bus:synchronizeTimeResponse>
<Time>20181010114431</Time>
<bus-result>
<Code>0</Code>
<Message/>
</bus-result>
</bus:synchronizeTimeResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Кодв Android:
class TareaWSConsulta extends AsyncTask<String,Integer,Boolean> {
private String resultString;
@Override
protected Boolean doInBackground(String... strings) {
boolean resul = true;
SoapObject busTerminal = new SoapObject(NAMESPACE,"busterminal");
PropertyInfo busCode = new PropertyInfo();
busCode.setName("BusCode");
busCode.setValue("1");
busCode.setType(String.class);
busTerminal.addProperty(busCode);
SoapObject example = new SoapObject(NAMESPACE,METHOD_NAME);
example.addProperty(busCode);
SoapSerializationEnvelope env = new SoapSerializationEnvelope(SoapEnvelope.VER11);
env.setOutputSoapObject(example);
HttpTransportSE httpTransport = new HttpTransportSE(URL);
try {
httpTransport.debug = true;
httpTransport.call(SOAP_ACTION,env);
Object result = env.getResponse();
if (result == null){
Log.i(TAG,"Respuesta nula: ");
}else {
Log.i(TAG, "Respuesta: " + result.toString());
Vector response = (Vector) result;
for (int i = 0 ; i < response.size() ; i++){
Log.i(TAG, "Respuesta: " + response.elementAt(i).toString());
}
SoapObject(NAMESPACE,"synchronizeTimeResponse");
Log.i(TAG, "Respuesta: " + resultString);
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return resul;
}
Войдите в службу (работает в данный момент локально, проверено также в удаленном режиме):
"-----------------Terminal-------------------"
"TerminalCode:, TerminalID:"
"BusCode:, BusID:"
"CompanyCode:, CompanyID:"
"VersionCode:, NSerie:"
"Signal:, Downloaded:"
"ProtocolVersion:, FilesVersion:"
Если код работал правильно, журнал должен отображатьЗначение BusCode, но оно пустое.Остальные параметры закодированы, но я их опускаю, так как я с ними согласен.Есть идеи, что я делаю не так?