GWT -

2011-04-23 6 views
1

내가 내 REST 서비스가 REST 서비스에서 콜백에서 응답 없음 :GWT -

그런 다음 몇 가지 JSON 데이터를 반환 http://localhost:4242/myrestservice/getobject , 난 내 GWT 클라이언트가 : 클라이언트가 비동기가 호출 어떻게해야되는 http://localhost:4242/gwtclient REST 서비스.

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 
} 
} 
} 

불행하게도, 내가 응답을 얻을 :

이에 임 꽤 새로운, 그래서 내 첫 번째 아이디어는 다음을 수행하는 것이 었습니다.

나는 나머지 서비스를 확인하고, 내 GWT 응용 프로그램 나던 답변을받을 것으로 보인다 객체

를 전송한다.

어떻게 만들 수 있습니까?

UPDATE

여기 방화범 내 결과입니다 :

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 

하지만 난() = 0 빈 응답 response.getStatusCode를 얻을!

업데이트 2 : 나는 URL의 로컬 호스트를 사용했다

나는 ...

문제는 사실 SOP에 있었다 ... 지금은 너무 바보 같은 느낌,하지만 내 코드에서 내가 사용하던 127.0.0.1!

젠장 ....

+0

나는 SOP에 대해 읽고,하지만 그들은 같은 포트와 로컬 호스트에 모두 있기 때문에, 나는 그것이 내 경우에는 문제가 될 야해 생각 : HTTP : // EN .wikipedia.org/wiki/Same_origin_policy 내가 잘못 이해하지 않았다면? – guigui42

+0

파이어 버그를 사용하셨습니까? GWT 클라이언트가 넷 패널에서 전화를 걸 었는지 여부를 확인할 수 있습니다. 귀하의 휴식 서비스가 반환하는 답변을 볼 수도 있습니다. –

+0

Firebug 로그로 내 게시물을 업데이트했습니다 ... 대답은 비어 있습니다. – guigui42

답변

2

당신은 당신이 비동기 콜백을 사용하고 싶은 말은하지만 당신은 당신의 코드에서 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); 
     } 
    } 

[편집 :] 어쩌면 당신이 찾아내는 일이 here:

+0

나는 그 변경 사항도 수행했으나 여전히 응답을받습니다 .getStatusCode() = 0 – guigui42

+0

이상한. 나는 몇 가지를 직접 시도 ... –

+0

gwt 및 json에 대한 몇 가지 정보와 함께 내 대답에 링크를 게시했습니다. 어쩌면 너는 그걸 가지고 뭔가있는거야? –