我正在使用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时,一些字节被添加到响应中并稍微移位,因此以某种方式破坏了请求中的其余数据。
我目前的猜测是,它与this类似,但我只是留下一些遗留下来的字符,以某种方式弄乱其余部分。
提前感谢任何可能将其推向正确方向的提示。