我一直在使用ksoap2库来进行所有的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();
}
答案 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的简单更改就可以实现。