【问题标题】:Is there a problem with ksoap2 and soap Version 12?ksoap2和soap版本12有问题吗?
【发布时间】:2010-11-15 21:41:59
【问题描述】:

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

【问题讨论】:

  • 您的意思是,您使用 v11 更进一步?你真的得到了正确的回应吗?
  • 我得到了肥皂服务拒绝的许可。这似乎是我使用的 url 而不是 ksoap 库的问题。
  • PermissionDenied 为 99%,因为您没有在 AndroidManifest 中提供

标签: android soap ksoap2


【解决方案1】:

您是否尝试过各种信封选项以了解服务的预期?

例如你可以设置

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

【讨论】:

  • 问题仍未解决,但赏金即将到期。所以我会把它给你作为奖励你在 android 上的 ksoap 的努力。感谢您提供与肥皂 API 通信的唯一有效解决方案。
  • 谢谢。这可能是尝试在服务器端使用不同配置的情况。希望你能控制它。
  • 谢谢!真的有帮助:D终于!顺便说一句,帮助我的是将 SOAP 版本从 SOAP12 更改为 SOAP11 + Manfred Moser 提供的这些设置
【解决方案2】:

我所做的是使用版本 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

我希望这会有所帮助!

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      尝试VR11 并替换您的

      Object response = envelope.getResponse();
      

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

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,我不断收到来自envelop.getResponse 的异常“Permission Denied”。

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

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

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

        【讨论】:

        • 问题中提到的错误与您实际提供的解决方案不同...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多