我正在编写一个简单的 Google Web Toolkit 服务,它充当代理,基本上存在以允许客户端向不同的服务器进行 POST。客户端实质上使用此服务来请求 HTTP 调用。该服务只有一个异步方法调用,称为 ajax(),它应该只是转发服务器响应。我实现调用的代码如下所示:
class ProxyServiceImpl extends RemoteServiceServlet implements ProxyService {
@Override
public Response ajax(String data) {
RequestBuilder rb = /*make a request builder*/
RequestCallback rc = new RequestCallback() {
@Override
public void onResponseReceived(Response response) {
/* Forward this response back to the client as the return value of
the ajax method... somehow... */
}
};
rb.sendRequest(data, requestCallback);
return /* The response above... except I can't */;
}
}
当然,您可以看到我的问题的基本形式。ajax() 方法是异步使用的,但 GWT 决定聪明一点,对愚蠢的老开发人员隐藏它,这样他们就可以编写没有回调的普通 Java 代码。GWT 服务基本上只是做魔术而不是接受回调参数。
那么问题就来了,因为 GWT 对我隐藏了回调对象。我正在尝试从服务实现中进行自己的异步调用,但我做不到,因为 GWT 服务假定您在服务实现中的行为是同步的。如何解决这个问题并从我的服务方法实现中进行异步调用?