Я пишу простой сервис 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 предполагают, что вы ведете себя синхронно в реализациях сервиса. Как я могу обойти это и сделать асинхронный вызов из моей реализации метода обслуживания?