我测试了使用ksoap2调用soap 12 webservices。 我用这段代码来调用webservice:
SoapObject request = new SoapObject(NAMESPACE, NAME);
request.addProperty("id", ID);
request.addProperty("name", "test@test.de");
request.addProperty("pw", "password");
request.addProperty("listid", 501);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.setOutputSoapObject(request);
AndroidHttpTransport client = new AndroidHttpTransport(URL);
try {
client.call(NAMESPACE + NAME, envelope);
Object response = envelope.getResponse();
} catch (IOException e) {
Log.e(getClass().getSimpleName(), "IO Problem", e);
} catch (XmlPullParserException e) {
Log.e(getClass().getSimpleName(), "Parser Problem", e);
}
我现在得到以下例外:
org.xmlpull.v1.XmlPullParserException:expected: START_TAG {http://www.w3.org/2001/12/soap-envelope}Envelope (position:START_TAG <{http://schemas.xmlsoap.org/soap/envelope/}soapenv:Envelope>@1:114 in java.io.InputStreamReader@44f28a80)
这是服务器响应的问题还是我的代码到目前为止有什么问题?似乎其他用户也有同样的问题。如果我将Envelope更改为SoapEnvelope.VER11,我会更进一步(我可能因为错误的URL而从soap服务器获得访问被拒绝的响应)可能缺少创建VER12信封的其他信息。
答案 0 :(得分:4)
您是否尝试过信封的各种选项以查看服务所需的内容?
E.g。你可以设置
envelope.dotNet = true;
envelope.headerOut = security; // this is an Element[] created before
envelope.encodingStyle = SoapEnvelope.ENC;
envelope.setAddAdornments(false);
envelope.implicitTypes = false;
还有更多。看看javadoc?
还要确保使用ksoap2-android
项目的最新版本来获取一些不在正常sourceforge
项目中的修复。
答案 1 :(得分:1)
我做的工作是使用版本11,它对我来说很好用: - )
// Request model
SoapObject request = new SoapObject(namespace, Metodo);
// Envelop model
SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11);
sobre.dotNet = true;
sobre.setOutputSoapObject(request);
// Transport model
HttpTransportSE transporte = new HttpTransportSE(url);
// Let's call it :)
transporte.call(accionSoap, sobre);
//Result
SoapPrimitive resultado = (SoapPrimitive) sobre.getResponse();
tv.setText("" + resultado.toString());
我的变数:
private static final String accionSoap = "http://tempuri.org/ServicioAndroid";
private static final String Metodo = "ServicioAndroid";
private static final String namespace = "http://tempuri.org/";
private static final String url = "http://192.168.1.33/AutoEPOC_H/WS/WSAutoEPOC.asmx";
此Web服务是使用dotNet创建的。您可以使用IIS运行Web Service来检查方法,操作,命名空间和URL。
如果您了解西班牙语,可以查看以下链接:
http://www.youtube.com/watch?v=_MMByNiwqMc
http://programa-con-google.blogspot.com/2010/12/android-como-consumir-un-servicio-web.html
我希望这有帮助!
答案 2 :(得分:0)
尝试VR11
并替换
Object response = envelope.getResponse();
与
SoapObject reponse=(SoapObject)envelope.getResponse();
答案 3 :(得分:0)
我只使用ksoap2 ver11 ...当我在localhost以外的其他服务器上使用它时,它仍然会出现expected start_tag
错误。
我的网络服务完全由我公司的服务器托管,但它在Android 2.2模拟器中提供了这个预期的开始标记错误,并且在吐司中没有显示任何内容(空错误)。
我不确定,但它可能是手机中的'NetworkOnMainThread'例外(Android 4.0)。
答案 4 :(得分:-2)
我遇到了同样的问题,我不断从envelop.getResponse
获得“权限被拒绝”的异常。
我认为我的SOAP请求出了问题,并尝试对信封进行了一些更改。最后,在查看了其他一些主板之后,我意识到我需要获得Android的额外许可才能允许这样做。
因此,请将以下权限添加到Android应用的清单中。
<uses-permission android:name="android.permission.INTERNET">