Java tutorial
/* * Copyright 2007-2011 Nicolas Zozol * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.robustaweb.library.gwt; import com.google.gwt.http.client.Header; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.Response; import com.google.gwt.http.client.URL; import com.robustaweb.library.commons.exception.HttpException; import com.robustaweb.library.rest.HttpMethod; import com.robustaweb.library.rest.client.Callback; import com.robustaweb.library.rest.client.implementation.AbstractAsynchronousRestClient; /** * * @author Nicolas Zozol for Robusta Web ToolKit & <a href="http://www.edupassion.com">Edupassion.com</a> - nzozol@robustaweb.com */ public class GwtRestClient extends AbstractAsynchronousRestClient<RequestBuilder> { RequestBuilder builder; /** * Creates a client wich will use relative uris (set the applicationUri to '/') */ public GwtRestClient() { this(""); } /** * If no applicationUri is set, the client will use "/" as base URI */ public GwtRestClient(String applicationUri) { if (applicationUri == null) { applicationUri = "/"; } GwtRestClient.applicationUri = applicationUri; } /** * {@inheritDoc } */ @Override public RequestBuilder getUnderlyingClient() { return this.builder; } /** * {@inheritDoc } */ @Override protected void executeMethod(HttpMethod method, String url, String requestBody, Callback callback) throws HttpException { try { RequestBuilder.Method meth = null; switch (method) { case GET: meth = RequestBuilder.GET; break; case POST: meth = RequestBuilder.POST; break; case DELETE: meth = RequestBuilder.DELETE; break; case PUT: meth = RequestBuilder.PUT; break; default: throw new IllegalStateException("No method valid for : " + method); } this.builder = new RequestBuilder(meth, url); if (this.contentType != null && !this.contentType.isEmpty()) { this.builder.setHeader("Content-Type", this.contentType); } if (GwtRestClient.authorizationValue != null && GwtRestClient.authorizationValue.length() > 0) { this.builder.setHeader("Authorization", GwtRestClient.authorizationValue); } RestRequestCallback cb = new RestRequestCallback(callback); this.builder.sendRequest(this.requestBody, cb); } catch (Exception ex) { callback.onException(ex); } finally { clean(); } } @Override public void join() { throw new UnsupportedOperationException("Not supported yet for GWT. Javascript doesn't use Threads."); } /** * Encoding is done automatically with the client. The method will so return the exactly same value * @param nameOrValue * @return the exactly same value */ @Override protected String encodeParameter(String nameOrValue) { return URL.encode(nameOrValue); } private class RestRequestCallback implements RequestCallback { Callback callback; int httpCode; String response; public RestRequestCallback(Callback callback) { System.out.println("Creating RequestCallback"); this.callback = callback; } /** * {@inheritDoc } */ @Override public void onResponseReceived(Request request, Response response) { System.out.println("response received :" + response.getStatusText()); this.httpCode = response.getStatusCode(); this.response = response.getText(); Header[] headers = response.getHeaders(); for (Header header : headers) { GwtRestClient.this.responseHeaders.put(header.getName(), header.getValue()); } try { callCallback(callback, httpCode, this.response); } catch (RuntimeException ex) { ex.printStackTrace(); throw ex; } } /** * @{@inheritDoc } */ @Override public void onError(Request request, Throwable exception) { System.out.println("error:" + exception.getMessage()); callback.onException( new HttpException("Unable to execute request : " + exception.getMessage(), exception)); } } }