---------- OfflineRequestCallback: used to get serialized response and
handle it appropriately.
public class OfflineRequestCallback implements RequestCallback {
// This String we can save in localStorage.
private static String serializedResponse;
private RequestCallback callback;
public OfflineRequestCallback(RequestCallback callback) {
this.callback = callback;
}
@Override
public void onResponseReceived(Request request, Response response) {
if (response.getStatusCode() == 200) {
serializedResponse = response.getText();
callback.onResponseReceived(request, response);
}
else {
callback.onResponseReceived(request, getOldResponse());
}
}
@Override
public void onError(Request request, Throwable exception) {
callback.onResponseReceived(request, getOldResponse());
}
private Response getOldResponse() {
return new Response() {
@Override
public String getText() {
return serializedResponse;
}
@Override
public String getStatusText() {
return null;
}
@Override
public int getStatusCode() {
return 200;
}
@Override
public String getHeadersAsString() {
return null;
}
@Override
public Header[] getHeaders() {
return null;
}
@Override
public String getHeader(String header) {
return null;
}
};
}
}
---------- OfflineRequestBuilder: uses OfflineRequestCallback as a
wrapper class.
public class OfflineRequestBuilder extends RequestBuilder {
public OfflineRequestBuilder(Method httpMethod, String url) {
super(httpMethod, url);
}
@Override
public Request send() throws RequestException {
String requestData = super.getRequestData();
OfflineRequestCallback requestCallbackWrapper = new
OfflineRequestCallback(
super.getCallback());
return super.sendRequest(requestData, requestCallbackWrapper);
}
}
---------- Client code:
...
private final TestServiceAsync testService =
GWT.create(TestService.class);
public void onModuleLoad() {
...
RpcRequestBuilder builder = new RpcRequestBuilder() {
@Override
protected RequestBuilder doCreate(String serviceEntryPoint) {
return new OfflineRequestBuilder(RequestBuilder.POST,
((ServiceDefTarget) testService).getServiceEntryPoint());
}
};
((ServiceDefTarget) testService).setRpcRequestBuilder(builder);
...
// RPC call
testService.serviceFunction(param, callback);
}
Regards,
Alex
--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
No comments:
Post a Comment