Santosh
Santosh

Reputation: 1929

GWT JSONPRequestBuilder - "Unknown Token :" error in browser console with Timeout exception at the end

I am trying to call a Restful WS from GWT using JSOPRequestBuilder. I have a similar issue which was reported in the link

http://groups.google.com/group/google-web-toolkit/browse_thread/thread/ef93383aca7a3dfc/d4dc5bad1a9110ea

But, I could not figure out the solution. Kindly help me at the earliest.

My JAX-WS resource code snippet from server

 @GET
   @Produces(MediaType.APPLICATION_JSON)
   public DealerAddress getDealerAddress(@QueryParam("dealerId") String sDealerId) {

       DealerAddress dlrAd = new DealerAddress("test", "test", "test", "test", 10, new Date(), new Date());
       return dlrAd;
   }

Jersey returns a JSON object of DealerAddress.

Now rest URL "https://127.0.0.1:8181/application/rest/OrderManagementResource?alt=json-in-script&dealerId=DLR1" works absolutely fine when i tried request in browser.

It even works with RequestBuilder approach from GWT but not with JSONPRequestBuilder approach.

Code snippet to invoke WS from GWT using JSONPRequestBuilder

JsonpRequestBuilder jsonPReqBuilder = new JsonpRequestBuilder();        
jsonPReqBuilder.setTimeout(100000);
        jsonPReqBuilder.setCallbackParam("callback");
        jsonPReqBuilder.requestObject("https://127.0.0.1:8181/application/rest/OrderManagementResource?alt=json-in-script&dealerId=DLR1" , new       AsyncCallback<DealerAddressJSON>() {

            @Override
            public void onFailure(Throwable caught) {
                // TODO Auto-generated method stub
                caught.printStackTrace();
                Window.alert("Inside error"+caught.getLocalizedMessage());          
            }

            @Override
            public void onSuccess(DealerAddressJSON result) {
                // TODO Auto-generated method stub
                Window.alert("Inside success"+result);
            }

        });

where as DealerAddressJSON is a JavaScriptObject type class.

I could see that my JAX Rest resource getting called and saying returning from server.

Also, I could see that in Firebug that the response comes in browser but fails with an exception "Unknown token :" At the end I always get a Timeout exception. Now I am in big question whether the way we return JSON from JAX-RS resource is a problem in server or JSONPRequestBuilder calling procedure is a problem? I could not understand the callback changes which some of the links explained on this issue.

Kindly help me.

Upvotes: 1

Views: 949

Answers (1)

Colin Alworth
Colin Alworth

Reputation: 18346

You are probably sending back JSON, while the JSONPRequestBuilder expects JSONP. These are not the same thing.

JSON is just the data, as is - make the request using AJAX (i.e. the RequestBuilder), and the contents can be read directly. These requests can only be made to the same server. Example JSON data:

{"response":"success", "items":[{"id":1}, {"id":2}]}

In contrast, JSONP is designed for cross-origin requests, so instead of just containing the data, the data is wrapped up in a JavaScript. Since your JSON service isn't wrapping the a response in a js function call, this isn't working. Example JSONP data:

callback_1({"response":"success", "items":[{"id":1}, {"id":2}]})

The callback changes with each request, so the server is supposed to change that callback function based on what the client requested each time.

Upvotes: 2

Related Questions