package net.ocheyedan.wrk; import org.codehaus.jackson.type.TypeReference; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * User: blangel * Date: 6/29/12 * Time: 9:26 PM */ public final class RestTemplate { public static <T> T get(String restfulEndpoint, TypeReference<T> forResultType) { return invoke(restfulEndpoint, "GET", forResultType); } public static <T> T post(String restfulEndpoint, TypeReference<T> forResultType) { return invoke(restfulEndpoint, "POST", forResultType); } public static <T> T put(String restfulEndpoint, TypeReference<T> forResultType) { return invoke(restfulEndpoint, "PUT", forResultType); } public static <T> T delete(String restfulEndpoint, TypeReference<T> forResultType) { return invoke(restfulEndpoint, "DELETE", forResultType); } private static <T> T invoke(String restfulEndpoint, String method, TypeReference<T> forResultType) { T result = null; InputStream stream = null; try { URL url = new URL(restfulEndpoint); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod(method); stream = connection.getInputStream(); result = Json.mapper().readValue(stream, forResultType); connection.disconnect(); } catch (FileNotFoundException fnfe) { return null; } catch (IOException ioe) { if (ioe.getMessage().startsWith("Server returned HTTP response code: 400")) { return result; } else { Output.print(ioe); } } catch (Exception e) { Output.print(e); } finally { if (stream != null) { try { stream.close(); } catch (IOException ioe) { Output.print(ioe); } } } return result; } private RestTemplate() { } }