2

我测试了用 ksoap2 调用一个soap 12 webservices。我用这段代码来调用网络服务:

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)

这是服务器响应的问题,还是到目前为止我的代码有问题?似乎其他用户也有同样的问题。如果我将信封更改为 SoapEnvelope.VER11,我会更进一步(我收到来自肥皂服务器的拒绝访问响应可能是因为 URL 错误)可能缺少创建 VER12 信封的其他信息。

4

5 回答 5

4

您是否尝试过信封的各种选项以查看服务的期望?

例如,您可以设置

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

于 2010-12-02T19:05:40.883 回答
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 服务来检查您的方法、操作、名称空间和 URL。

如果您懂西班牙语,可以查看以下链接:

http://www.youtube.com/watch?v=_MMByNiwqMc

http://programa-con-google.blogspot.com/2010/12/android-como-consumir-un-servicio-web.html

我希望这有帮助!

于 2011-06-27T10:16:03.743 回答
0

尝试VR11更换您的

Object response = envelope.getResponse();

SoapObject reponse=(SoapObject)envelope.getResponse();
于 2010-12-02T09:38:22.760 回答
0

我只使用 ksoap2 ver11 ...... expected start_tag当我在 localhost 以外的另一台服务器上使用它时,它仍然给我一个错误。

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

我不确定,但它可能是手机(Android 4.0)中的“NetworkOnMainThread”异常。

于 2013-05-02T07:39:58.697 回答
-2

我遇到了同样的问题,我不断收到来自envelop.getResponse.

我认为我的 SOAP 请求有问题,并尝试了对信封的一些更改。最终,在浏览了其他一些板后,我意识到我需要一个额外的 android 权限才能允许这样做。

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

<uses-permission android:name="android.permission.INTERNET">
于 2010-12-18T22:40:09.367 回答