我正在努力从网页成功地对 SOAP Web 服务进行 Web 服务调用。 Web 服务是使用 JAX-WS 的 Java Web 服务。
这是我尝试调用的网络方法:
@WebMethod
public String sayHi(@WebParam(name="name") String name)
{
System.out.println("Hello "+name+"!");
return "Hello "+name+"!";
}
我尝试使用 JQuery 库 jqSOAPClient 进行 Web 服务调用(http://plugins.jquery.com/project/jqSOAPClient http://plugins.jquery.com/project/jqSOAPClient).
这是我使用过的代码:
var processResponse = function(respObj)
{
alert("Response received: "+respObj);
};
SOAPClient.Proxy = url;
var body = new SOAPObject("sayHi");
body.ns = ns;
body.appendChild(new SOAPObject("name").val("Bernhard"));
var sr = new SOAPRequest(ns+"sayHi",body);
SOAPClient.SendRequest(sr,processResponse);
似乎没有回复。当在jqSOAPClient.js
我记录了xData.responseXML
数据成员我得到“未定义”。在网络服务中我看到警告
2011 年 3 月 24 日上午 10:49:51 com.sun.xml.ws.transport.http.server.WSHttpHandler
警告:无法处理 HTTP 方法:OPTIONS
我还尝试过使用 javascript 库,soapclient.js (http://www.codeproject.com/kb/Ajax/JavaScriptSOAPClient.aspx http://www.codeproject.com/kb/Ajax/JavaScriptSOAPClient.aspx)。我在这里使用的客户端代码是
var processResponse = function(respObj)
{
alert("Response received: "+respObj);
};
var paramaters = new SOAPClientParameters();
paramaters.add("name","Bernhard");
SOAPClient.invoke(url,"sayHi",paramaters,true,processResponse);
我绕过了soapclient.js中获取WSDL的部分,因为它不起作用
(我得到一个:IOException: An established connection was aborted by the software in your host machine
在网络服务端)。仅检索 WSDL 以供适当的名称空间使用,因此我只是将变量 ns 替换为实际的名称空间。
我在 Web 服务上收到与以前完全相同的警告(无法处理 HTTP 方法:选项),并且在浏览器的错误控制台中收到错误“文档为空”。当我在soapclient.js 中记录req.responseXML 的值时,我发现它为空。
任何人都可以建议可能出现的问题以及我应该做什么才能使其正常工作吗?