【发布时间】:2011-07-21 23:32:59
【问题描述】:
我正在努力从网页成功地对 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 (http://plugins.jquery.com/project/jqSOAPClient) 进行 Web 服务调用。
这是我使用的代码:
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 handleExchange 警告:无法处理 HTTP 方法:OPTIONS
我也尝试过使用 javascript 库soapclient.js (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 的部分,因为它不起作用
(我在 Web 服务端得到一个:IOException: An established connection was aborted by the software in your host machine)。 WSDL 仅被检索以供适当的名称空间使用,因此我刚刚将变量 ns 替换为实际的名称空间。
我在 Web 服务上收到与以前完全相同的警告(无法处理 HTTP 方法:OPTIONS),在浏览器的错误控制台中我收到错误“文档为空”。当我在soapclient.js 中记录req.responseXML 的值时,我看到它为空。
任何人都可以就可能出现的问题以及我应该怎么做才能使其正常工作提供建议吗?
【问题讨论】:
-
当我将 Web 服务部署到 Glassfish 时,客户端得到相同的响应(在 jqSOAPClient.js 的情况下为“未定义”,在使用 soapclient.js 时为空)。
标签: java javascript jquery soap jax-ws