我正在使用 ksoap2 2.5.4 版从基于cordova的android应用程序向服务器发送soap请求。这在使用我们的测试设备的 wifi 连接时效果很好,但在使用 3g 连接时会失败。
测试的设备是 Nexus 7
我已经广泛搜索了这个问题,但还没有找到解决方案。
使用 wifi 连接时,响应看起来不错,但每当我切换到使用 3g 时,我都会收到以下错误:
org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT jsoapenv:Env...@1:248 in java.io.InputStreamReader@4164ce20)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:426)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:2029)
at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126)
at org.ksoap2.transport.Transport.parseResponse(Transport.java:90)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:179)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:90)
at se.icecon.poc.SOAPRequest.login(SOAPRequest.java:119)
at se.icecon.poc.SOAPRequest.execute(SOAPRequest.java:37)
at org.apache.cordova.api.Plugin$1.run(Plugin.java:78)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
这是我的请求代码。
private String login (String username, String password) {
SoapObject request = new SoapObject(NAMESPACE, "LoginRequestMessage");
request.addProperty("username", username);
request.addProperty("password", password);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
ht.debug = true;
try {
ht.call(SOAP_ACTION, envelope);
return ht.responseDump;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
似乎当使用 3g 时,一些字节被添加到响应中并有所移动,因此以某种方式破坏了请求中的其余数据。
我目前的猜测是它与此类似,但我只是得到了一些剩余的字符,它们以某种方式把其余的弄乱了。
提前感谢任何可能将其推向正确方向的提示。