代码之家  ›  专栏  ›  技术社区  ›  Janusz Daniel Rindt

ksoap2和soap版本12有问题吗?

  •  2
  • Janusz Daniel Rindt  · 技术社区  · 15 年前

    我测试了使用ksoap2调用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)
    

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

    5 回复  |  直到 15 年前
        1
  •  4
  •   abhinavrathore019    13 年前

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

    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
  •  1
  •   Sonhja    14 年前

    我所做的是使用版本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
  •  0
  •   Shachi    13 年前

    我只使用ksoap2 ver11。。。但它还是给了我一个 expected start_tag 在本地主机以外的其他服务器上使用时出错。

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

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

        4
  •  0
  •   BeardFist    13 年前

    尝试 VR11 替换你的

    Object response = envelope.getResponse();
    

    具有

    SoapObject reponse=(SoapObject)envelope.getResponse();
    
        5
  •  -2
  •   Bill the Lizard    14 年前

    我也有同样的问题,我一直在申请一个例外许可 envelop.getResponse .

    我认为我的SOAP请求有问题,并尝试了对信封的一些更改。最后,在查看了其他一些板之后,我意识到我需要一个额外的安卓许可来允许这个。

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

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