/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE file at the root of the source * tree and available online at * * https://github.com/keeps/roda */ package org.roda.core.util; import java.io.IOException; import java.io.Serializable; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.roda.core.data.exceptions.RODAException; import org.roda.core.data.utils.JsonUtils; /** * 20160824 hsilva: I think someone, outside RODA code base, is using this * method via maven dependency * * @author Hélder Silva <hsilva@keep.pt> */ public final class RESTClientUtility { /** Private empty constructor */ private RESTClientUtility() { // do nothing } public static <T extends Serializable> T sendPostRequest(T element, Class<T> elementClass, String url, String resource, String username, String password) throws RODAException { CloseableHttpClient httpClient = HttpClientBuilder.create().build(); String basicAuthToken = new String(Base64.encode((username + ":" + password).getBytes())); HttpPost httpPost = new HttpPost(url + resource); httpPost.setHeader("Authorization", "Basic " + basicAuthToken); httpPost.addHeader("content-type", "application/json"); httpPost.addHeader("Accept", "application/json"); try { httpPost.setEntity(new StringEntity(JsonUtils.getJsonFromObject(element))); HttpResponse response; response = httpClient.execute(httpPost); HttpEntity responseEntity = response.getEntity(); int responseStatusCode = response.getStatusLine().getStatusCode(); if (responseStatusCode == 201) { return JsonUtils.getObjectFromJson(responseEntity.getContent(), elementClass); } else { throw new RODAException("POST request response status code: " + responseStatusCode); } } catch (IOException e) { throw new RODAException("Error sending POST request", e); } } }