在Android上使用WSE调用web服务

在Android上使用WSE调用web服务,android,web-services,soap,ksoap2,ksoap,Android,Web Services,Soap,Ksoap2,Ksoap,我一直在使用ksoap2库进行我所有的SOAP调用,它们都是成功的。但是当我尝试调用使用WSE的web服务时,我收到以下错误 代码:soap:Sender,原因:WSE012:输入不是有效的soap消息,因为缺少以下信息:操作 据我所知,这意味着头中需要soap操作,但它在文档中明确指出,SOAPAction不是版本12的有效头 当我将其添加为标头时,我只收到一个“服务器无法处理请求”错误。我已经在这上面呆了一段时间,希望有人知道发生了什么事。这里是主要代码 SoapObject request

我一直在使用ksoap2库进行我所有的SOAP调用,它们都是成功的。但是当我尝试调用使用WSE的web服务时,我收到以下错误

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

据我所知,这意味着头中需要soap操作,但它在文档中明确指出,SOAPAction不是版本12的有效头

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

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();
}
SoapObject请求=新的SoapObject(名称空间、方法名称);
request.addProperty(名称、值);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
试一试{
HttpTransportSE传输=新的HttpTransportSE(URL);
列表标题=新建ArrayList();
添加(新的HeaderProperty(“SOAPAction”,SOAPAction));
调用(soapAction、信封、标题);
}捕获(例外e){
e、 printStackTrace();
}

您是否根据wsdl在代码中定义了soap操作(命名空间/soapAction)

    private static final String SOAP_ACTION_Auth = "http://AuthHeaderImplementation/Authentication";
在你的代码里有一件事

transport.call(soapAction, envelope, headers);
根据ksoap2文档,它只接受操作和信封作为输入参数

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);

看起来ksoap库从soap VER12的信封中排除了soap操作。WSE增强的web服务需要执行此操作,因此从VER12到VER11的简单更改就可以完成此操作。

调用方法有另一个构造函数,允许将头作为参数添加。在深入研究代码之后,soapAction从未在ver12中实际使用过。您可以传入null参数,但对于非WSE web服务,它仍然可以正常工作。我不知道这样做和设置信封有什么区别。我只是想知道定义特定URL的soap操作的目的是什么?