ksoap2和soap版本12有问题吗?
我测试了用ksoap2调用soap 12 webservices。 我用这个代码来调用Web服务:ksoap2和soap版本12有问题吗?
SoapObject request = new SoapObject(NAMESPACE, NAME);
request.addProperty("id", ID);
request.addProperty("name", "[email protected]");
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 [email protected])
这是服务器响应的问题,或者是有什么错误的,我到目前为止的代码?看来其他用户也有同样的问题。如果我将信封更改为SoapEnvelope.VER11,我会再进一步(可能由于URL错误,我从soap服务器获得访问被拒绝的响应),可能是因为缺少创建VER12信封的其他信息。
您是否尝试过你的信封查看服务所期待的各种选项?
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
项目中的修复。
尝试VR11
并更换
Object response = envelope.getResponse();
与
SoapObject reponse=(SoapObject)envelope.getResponse();
中提供
我有同样的问题,我不断从envelop.getResponse
得到一个例外“权限被拒绝”。
我认为我的SOAP请求出了问题,并试图对信封进行一些更改。最终,在查看其他一些板子后,我意识到我需要Android的额外权限来允许这样做。
因此,将以下权限添加到您的Android应用的清单。
<uses-permission android:name="android.permission.INTERNET">
错误中提到的错误与您实际提供的解决方案不同...... – DeltaCap 2013-06-06 05:22:54
我做了什么,使这项工作是使用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服务来检查您的方法,操作,命名空间和URL。
如果你懂得西班牙语,你可以检查这些链接:
http://www.youtube.com/watch?v=_MMByNiwqMc
http://programa-con-google.blogspot.com/2010/12/android-como-consumir-un-servicio-web.html
我希望这有助于!
我只使用ksoap2 ver11 ...当我在localhost以外的其他服务器上使用它时,它仍然给我一个expected start_tag
错误。
我的web服务完全由我公司的服务器托管,但它在Android 2.2模拟器中给出了这个预期的开始标记错误,并在吐司中不显示任何内容(空错误)。
我不确定,但它可以是电话(Android 4.0)中的'NetworkOnMainThread'异常。
你是什么意思,你更进一步与V11?你真的得到了正确的回应吗? – 2010-11-15 22:29:37
我从soap服务中获得拒绝的权限。这似乎是与使用URL而不是ksoap库的URL的问题。 – Janusz 2010-11-16 09:11:05
PermissionDenied是99%,因为您没有在您的AndroidManifest – Taras 2012-08-31 14:21:27