【问题标题】:Calling web-service using WSE on Android在 Android 上使用 WSE 调用 Web 服务
【发布时间】:2014-01-15 17:14:29
【问题描述】:

我的所有 SOAP 调用都使用了 ksoap2 库,并且它们都取得了成功。但是当我尝试调用使用 WSE 的 Web 服务时,我收到以下错误...

代码:soap:Sender,原因:WSE012:输入不是有效的 SOAP 消息,因为缺少以下信息:操作。

据我所知,这意味着标头中需要肥皂操作,但它在文档中明确指出 SOAPAction 不是版本 12 的有效标头。http://code.google.com/p/ksoap2-android/issues/detail?id=67

当我将它添加为标头时,我只是收到“服务器无法处理请求”错误。我已经坚持了一段时间,希望有人知道发生了什么。这是主要代码...

SoapObject request = new SoapObject(namespace, methodName);
request.addProperty(name, value);    
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.dotNet = true;  
envelope.setOutputSoapObject(request);
try {
    HttpTransportSE transport = new HttpTransportSE(URL);
    List<HeaderProperty> headers = new ArrayList<HeaderProperty>();
    headers.add(new HeaderProperty("SOAPAction", soapAction));
    transport.call(soapAction, envelope, headers);
} catch (Exception e) {
    e.printStackTrace();
}

【问题讨论】:

    标签: android web-services soap ksoap2 ksoap


    【解决方案1】:

    您是否根据您的 wsdl 在代码中定义了肥皂操作,例如 (namespace/soapAction),

        private static final String SOAP_ACTION_Auth = "http://AuthHeaderImplementation/Authentication";
    

    代码中有一点,

    transport.call(soapAction, envelope, headers);
    

    根据this ksoap2 doc,它只需要动作和信封作为输入参数。

    call(java.lang.String soapAction, SoapEnvelope envelope) 
          set the desired soapAction header field
    

    如果服务器需要,这就是我在代码中添加空标题的方式,

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
        //Create empty Header
        Element [] header = new Element[1];
        header[0]=new Element();
                   // add header to envelope
        envelope.headerOut = header;        
        envelope.setOutputSoapObject(request);
    

    【讨论】:

    • 调用方法有另一个构造函数,允许将标头作为参数添加。在更深入地查看代码之后,soapAction 从未在 ver12 中实际使用过。您可以传入一个空参数,它仍然适用于非 WSE Web 服务。我不确定这样做与设置信封.headerOut 之间有什么区别。我只是想知道定义该特定 URL 的肥皂动作的目的是什么?
    【解决方案2】:

    看起来 ksoap 库从 Soap VER12 的信封中排除了肥皂动作。 WSE 增强型 Web 服务需要此操作,因此从 VER12 到 VER11 的简单更改就可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多