我有一个网络服务,我想在其上访问 ping 方法。此方法只接受一个字符串并返回一个字符串。
我想在 android 设备上使用 ksoap2 库来访问它。经过多天未能达到正确的结果后,我发现 SoapUI 我的请求必须如下所示:
// Generated with SoapUI
<v:Envelope xmlns:ns="http://shared.bimserver.org/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<ns:ping>
<in>test</in>
</ns:ping>
</v:Body>
</v:Envelope>
这是我的代码:
String namespace = "http://shared.bimserver.org/";
String method = "ping";
String url = "http://10.0.0.5:8082/soap?WSDL";
SoapObject request = new SoapObject(namespace, method);
request.addProperty("in", "test");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
这是我的代码生成的请求。
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<ping xmlns="http://shared.bimserver.org/">
<in i:type="d:string">test</in>
</ping>
</v:Body>
</v:Envelope>
我发现网络服务不喜欢第 4 行
<ping xmlns="http://shared.bimserver.org/">
它的格式应该类似于上面使用soapUI 生成的(工作)请求。不知何故,Web 服务不喜欢直接在 ping 标记中定义命名空间。然而。使用我的代码,我得到以下响应:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error: unexpected element (uri:"http://shared.bimserver.org/", local:"in"). Expected elements are <{}in></faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
那么如何从 ping 标签到信封标签获取命名空间呢?