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信封的其他信息。

+0

你是什么意思,你更进一步与V11?你真的得到了正确的回应吗? – 2010-11-15 22:29:37

+0

我从soap服务中获得拒绝的权限。这似乎是与使用URL而不是ksoap库的URL的问题。 – Janusz 2010-11-16 09:11:05

+2

PermissionDenied是99%,因为您没有在您的AndroidManifest – Taras 2012-08-31 14:21:27

您是否尝试过你的信封查看服务所期待的各种选项?

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项目中的修复。

+2

问题仍然没有解决,但赏金即将到期。所以我会给你作为奖励你在android上的ksoap上的努力。感谢唯一可以与soap API进行通信的工作解决方案。 – Janusz 2010-12-07 09:08:25

+0

Thx。这可能是尝试在服务器端使用不同配置的情况。希望你能控制它。 – 2010-12-07 20:04:50

+0

谢谢!真的帮助:D终于! 顺便说一句,帮助我将SOAP版本从SOAP12更改为SOAP11 + Manfred Moser提供的这些设置 – manWe 2013-07-30 21:14:57

尝试VR11并更换

Object response = envelope.getResponse(); 

SoapObject reponse=(SoapObject)envelope.getResponse(); 
+0

中提供 uses-permission>,它不会产生影响 – 2010-12-02 18:58:44

我有同样的问题,我不断从envelop.getResponse得到一个例外“权限被拒绝”。

我认为我的SOAP请求出了问题,并试图对信封进行一些更改。最终,在查看其他一些板子后,我意识到我需要Android的额外权限来允许这样做。

因此,将以下权限添加到您的Android应用的清单。

<uses-permission android:name="android.permission.INTERNET"> 
+1

错误中提到的错误与您实际提供的解决方案不同...... – 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

我希望这有助于!

我只使用kso​​ap2 ver11 ...当我在localhost以外的其他服务器上使用它时,它仍然给我一个expected start_tag错误。

我的web服务完全由我公司的服务器托管,但它在Android 2.2模拟器中给出了这个预期的开始标记错误,并在吐司中不显示任何内容(空错误)。

我不确定,但它可以是电话(Android 4.0)中的'NetworkOnMainThread'异常。