ksoap2和肥皂版本12有问题吗?

时间:2010-11-15 21:42:00

标签: android soap ksoap2

我测试了使用kso​​ap2调用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信封的其他信息。

5 个答案:

答案 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)

我只使用kso​​ap2 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">