Gwt Request builder - how to return the response string

gwt, java

Solution

GWT does not support synchronous Ajax, so you have to code your app using asynchronous pattern.

The low level object that GWT uses to perform the request is a XMLHttpRequest (except for old IE versions), and GWT always calls it's `open()` method with async set to true. So the only way to have synchronous ajax is maintaining your own modified version of `XMLHttpRequest.java`. But synchronous ajax is a bad idea, and even jQuery has deprecated this possibility.

So the normal way in gwt should be that your method returns `void`, and you passes an additional parameter with a callback to execute when the response is available.

public void getFolderJson(String path, Callback<String, String> callback) {  
    RequestBuilder builder = new RequestBuilder(...);
    try {
      builder.sendRequest(null, new RequestCallback() {  
        @Override  
        public void onResponseReceived(Request request, Response response) {
          callback.onSuccess(response.getText());  
        }  
        @Override  
        public void onError(Request request, Throwable exception) {}
          callback.onFailure(exception.getMessage());  
        });
    } catch (RequestException e) {
        callback.onFailure(exception.getMessage());  
    }  
}

I'd rather gwtquery `Promises` syntax for this instead of request-builder one:

  Ajax.get("http://localhost/folder?sessionId=foo&path=bar")
    .done(new Function(){
      public void f() {
        String text = arguments(0);
      }
    });

Problem

I need to implement a function that calls a web service and return the response. I tried ``` public String getFolderJson(String path) { String result="initial_value"; StringBuilder param = new StringBuilder(); param.append("?sessionId=").append(getSessionId()); param.append("&path=").append(path); RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, "https://localhost/folder" + param); try { builder.sendRequest(null, new RequestCallback() { @Override public void onResponseReceived(Request request, Response response) { result = response.getText(); System.out.println(response.getText()); //I need to return "result" } @Override public void onError(Request request, Throwable exception) {} }); return result; //the result get returned before the response is recieved.So i am getting the return value "initial_value". } catch (RequestException e) {} return null; } ``` On calling `getFolderJson()` the web service is called succesfully. But `result` is returned before the respnse is recieved. So I am getting the retunr value "initial_value". How to return the value from the response when `getFolderJson()` function ?

Original source