GWT - Нет ответа от CallBack от службы REST - PullRequest
1 голос
/ 24 апреля 2011

У меня есть служба REST: http://localhost:4242/myrestservice/getobject, которая возвращает некоторые данные JSON

Затем у меня есть мой GWT-клиент: http://localhost:4242/gwtclient, который должен выполнять асинхронные вызовы клиентаREST service.

Я довольно новичок в этом, поэтому моей первой идеей было сделать следующее:

RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode("http://localhost:4242/myrestservice/getobject"));
builder.setHeader("Accept", "application/json");
builder.setCallback(new MyObjectDescCallback());    
builder.setRequestData("");
Request req  = builder.send();

...

final class MyObjectDescCallback implements RequestCallback {
            public void onError(Request request, Throwable exception) {
                showAlert("error = "+exception.getMessage());

                GWT.log(exception.getMessage());
       }
            public void onResponseReceived(Request request, Response response) {
showAlert("response = " + response.getStatusCode());
//Do my stuff here
}
}
}

К сожалению, я не получил ответа.

Я проверилслужба Rest, и она отправляет объект

Кажется, что мое приложение GWT не получает ответ.

Есть идеи, как заставить это работать?

ОБНОВЛЕНИЕ

Вот мои результаты с Firebug:

Response Headers
Server  Apache-Coyote/1.1
Content-Type    application/json
Transfer-Encoding   chunked
Date    Sun, 24 Apr 2011 11:04:15 GMT

Request Headers
Host    127.0.0.1:4242
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
Accept  application/json
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Referer http://localhost:4242/gwtclient/gwtclient.html
Origin  http://localhost:4242

Но я получаю response.getStatusCode () = 0 и пустой ответ!

ОБНОВЛЕНИЕ 2:

Iчувствую себя так глупо ...

Проблема была на самом деле SOP ...

Я использовал URL localhost, но в своем коде я использовал 127.0.0.1!

Блин ....

1 Ответ

2 голосов
/ 24 апреля 2011

Вы говорите, что хотите использовать обратный вызов Async, но никогда не используете new AsyncCallback<string>() в своем коде. Вот как я делаю асинхронные вызовы на сервер с моим приложением gwt: (я не использую JSON, но здесь это не имеет значения)

request object = new request();
object.getMessageXml("test.php", "GET", null, new AsyncCallback<String>() {

    @Override
    public void onFailure(Throwable caught) {
        //error handling
    }

    @Override
    public void onSuccess(String result) {
        // do some stuff with the result
    }
});

А это класс запроса:

public void getMessageXml(String file, String type, String requestData, final AsyncCallback<String> callback) {

        RootLayoutPanel.get().addStyleName("loading");

        final String url = "test/" + file;
        RequestBuilder rb;

        try {
            if(type == "POST") {
                rb = new RequestBuilder(RequestBuilder.POST, URL.encode(url));
            }
            else {
                rb = new RequestBuilder(RequestBuilder.GET, URL.encode(url));
            }

            rb.setHeader("Content-Type", "application/x-javascript; charset:ISO-8859-1");
            rb.sendRequest(requestData, new RequestCallback() {

                @Override
                public void onResponseReceived(Request request, Response response) {

                    if(Response.SC_OK == response.getStatusCode()) {

                        callback.onSuccess(response.getText()); 
                    }
                    else {
                        //error 
                    }
                    RootLayoutPanel.get().removeStyleName("loading");   
                }

                @Override
                public void onError(Request request, Throwable exception) { 
                    callback.onFailure(exception);
                }   
            }); 
        }
        catch(RequestException rex) {
            callback.onFailure(rex);
        }   
    }

[EDIT:] Может быть, вы найдете здесь что-нибудь :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...