我试图建立一个我可以用来异步调用webservices的servlet。大多数情况下,它工作正常。我有一个带doGet方法的servlet和一个叫它的js。我在js中有一个回调方法,servlet在完成它的事情时正确调用它。第二次调用HttpServletResponse
复杂的是,我所调用的Web服务之一也是异步的,我希望能够在异步WS回调完成后第二次调用js回调方法。例如,如果您有状态字段,则当您调用同步Web服务时,它立即更新为“开始同步调用”,然后当servlet回调到达时,它将更改为作为Web服务结果的回调值。
当您调用异步Web服务时,更新字段立即更新为“开始异步调用”,并且很快从servlet接收到第一个指示已请求Web服务的回调,因此我们将该字段更新为“Processing Web服务“或其他。问题是,一旦Web服务完成并调用回servlet,我似乎无法弄清楚如何将结果发送给js回调方法。
我在AJAX和servlets方面很新,所以也许这是一种可怕的方式来完成我想要的。
Web服务都在Servlet中调用,主要使用Netbeans自动生成的WS调用。 WS称自己工作正常,但一旦我得到异步WS的结果,我被卡在web服务回调的handleResponse方法内,并且不再有任何对我想要更新的文档的响应元素的引用。
我试图原始响应变量存储为静态成员变量,并用它在用handleResponse方法如下所示:
javax.xml.ws.AsyncHandler<WsClients.Op11Response> asyncHandler = new javax.xml.ws.AsyncHandler<WsClients.Op11Response>() {
public void handleResponse(javax.xml.ws.Response<WsClients.Op11Response> asyncResponse) {
try {
storedResponse.setContentType("text/xml");
String returnString = asyncResponse.get().getReturn();
storedResponse.getWriter().write("<returnData><content>"
+ returnString + "</content></returnData>");
} catch (Exception ex) {
}
}
};
这不会附加调试器编译并似乎不能够无论如何分配一个参考。
有没有更好的方法来做到这一点?
所以你正在做一些使用web服务的异步处理,第一次调用开始处理,第二次调用取得结果?因为web服务调用不是真的异步(就像所有的http调用一样)? – ThomasRS 2011-04-11 19:33:50