+ public JerseyClient header(String name, Object value) {
+ headers.put(name, value);
+ return this;
+ }
+
+ public JerseyClient headers(Map<String, Object> hds) {
+ headers.putAll(hds);
+ return this;
+ }
+
+ public JerseyClient queryParam(String name, Object value) {
+ parameters.put(name, value);
+ return this;
+ }
+
+ public JerseyClient queryParams(Map<String, Object> params) {
+ parameters.putAll(params);
+ return this;
+ }
+
+ public JerseyClient path(String path) {
+ paths.add(path);
+ return this;
+ }
+
+ public String get(String url) {
+ return get(url, String.class);
+ }
+
+ public <T> T get(String url, Class<T> clazz) {
+
+ WebTarget target = appendPaths(client.target(url));
+
+ target = setParameters(target);
+
+ Invocation.Builder builder = setHeaders(target.request());
+
+ Response response = builder.get();
+
+ if (isSuccessful(response)) {
+ return response2Target(response, clazz);
+ }
+
+ return null;
+ }
+
+ public String post(String url) {
+ return post(url, null);
+ }
+
+ public String post(String url, Entity entity) {
+ return post(url, entity, String.class);
+ }
+
+ public <T> T post(String url, Entity entity, Class<T> clazz) {
+
+ WebTarget target = appendPaths(client.target(url));
+
+ setParameters(target);
+
+ Invocation.Builder builder = setHeaders(target.request());
+
+ Response response = builder.post(entity);
+
+ if (isSuccessful(response)) {
+ return response2Target(response, clazz);
+ }
+
+ return null;
+ }
+
+ public String put(String url, Entity entity) {
+ return put(url, entity, String.class);
+ }
+
+ public <T> T put(String url, Entity entity, Class<T> clazz) {
+ WebTarget target = appendPaths(client.target(url));
+
+ setParameters(target);
+
+ Invocation.Builder builder = setHeaders(target.request());
+
+ Response response = builder.put(entity);
+
+ if (isSuccessful(response)) {
+ return response2Target(response, clazz);
+ }
+
+ return null;
+ }
+
+ public String delete(String url) {
+ return delete(url, String.class);
+ }
+
+ public <T> T delete(String url, Class<T> clazz) {
+ WebTarget target = appendPaths(client.target(url));
+
+ setParameters(target);
+
+ Invocation.Builder builder = setHeaders(target.request());
+
+ Response response = builder.delete();
+
+ if (isSuccessful(response)) {
+ return response2Target(response, clazz);
+ }
+
+ return null;
+ }
+
+ private boolean isSuccessful(Response response) {
+ int status = response.getStatus();
+ if (!HttpStatus.isSuccess(status)) {
+ throw new HttpException(status, String.format("Failed to get response from the server. Info: %s",
+ response.readEntity(String.class)));
+ }
+ return true;
+ }
+
+ private WebTarget appendPaths(WebTarget target) {
+ for (String path : paths) {
+ target = target.path(path);
+ }
+ return target;
+ }
+
+ private Invocation.Builder setHeaders(Invocation.Builder builder) {
+ Set<Map.Entry<String, Object>> entries = headers.entrySet();
+ for (Map.Entry<String, Object> entry : entries) {
+ builder = builder.header(entry.getKey(), entry.getValue());
+ }
+ return builder;
+ }
+
+ private WebTarget setParameters(WebTarget target) {
+ Set<Map.Entry<String, Object>> entries = parameters.entrySet();
+ for (Map.Entry<String, Object> entry : entries) {
+ target = target.queryParam(entry.getKey(), entry.getValue());
+ }
+ return target;
+ }
+
+ private <T> T response2Target(Response response, Class<T> clazz) {
+ String responseText = response.readEntity(String.class);
+ if (clazz == null || clazz == String.class) {
+ return (T) responseText;
+ } else {
+ return GsonUtil.jsonToBean(responseText, clazz);
+ }