在Android上使用WSE调用Web服务

时间:2014-01-15 17:14:30

标签: android web-services soap ksoap2 ksoap

我一直在使用kso​​ap2库来进行所有的SOAP调用,但它们都取得了成功。但是当我尝试调用使用WSE的Web服务时,我收到以下错误...

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

据我所知,这意味着标题中需要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();
}

2 个答案:

答案 0 :(得分:0)

您是否根据wsdl在代码中定义了soap操作,例如(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);

答案 1 :(得分:0)

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

相关问题