summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java25
-rw-r--r--eaaf_core_utils/src/test/java/at/gv/egiz/eaaf/core/test/http/HttpClientFactoryTest.java26
2 files changed, 44 insertions, 7 deletions
diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java
index 10555822..365e969d 100644
--- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java
+++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java
@@ -18,7 +18,9 @@
package at.gv.egiz.eaaf.core.impl.http;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
@@ -37,6 +39,7 @@ import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.conn.ssl.TrustAllStrategy;
+import org.apache.http.entity.ContentType;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.TrustStrategy;
@@ -46,6 +49,7 @@ import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider;
import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
import at.gv.egiz.eaaf.core.exceptions.EaafFactoryException;
import at.gv.egiz.eaaf.core.impl.data.Pair;
+import at.gv.egiz.eaaf.core.impl.data.Triple;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@@ -71,6 +75,27 @@ public class HttpUtils {
}
/**
+ * Http response-handler that gives a pair of http status-code,
+ * a copy of the full http-body as {@link InputStream} and the response {@link ContentType}.
+ *
+ * @return {@link Triple} of http response {@link StatusLine}, http body as {@link InputStream},
+ * and {@link ContentType}
+ */
+ public static ResponseHandler<Triple<StatusLine, ByteArrayInputStream, ContentType>>
+ bodyStatusCodeResponseHandler() {
+ return new ResponseHandler<Triple<StatusLine, ByteArrayInputStream, ContentType>>() {
+ @Override
+ public Triple<StatusLine, ByteArrayInputStream, ContentType> handleResponse(HttpResponse response)
+ throws ClientProtocolException, IOException {
+ byte[] bodyBytes = EntityUtils.toByteArray(response.getEntity());
+ return Triple.newInstance(response.getStatusLine(), new ByteArrayInputStream(bodyBytes),
+ ContentType.getOrDefault(response.getEntity()));
+
+ }
+ };
+ }
+
+ /**
* Helper method to retrieve server URL including context path.
*
* @param request HttpServletRequest
diff --git a/eaaf_core_utils/src/test/java/at/gv/egiz/eaaf/core/test/http/HttpClientFactoryTest.java b/eaaf_core_utils/src/test/java/at/gv/egiz/eaaf/core/test/http/HttpClientFactoryTest.java
index c88e05d5..baedadc8 100644
--- a/eaaf_core_utils/src/test/java/at/gv/egiz/eaaf/core/test/http/HttpClientFactoryTest.java
+++ b/eaaf_core_utils/src/test/java/at/gv/egiz/eaaf/core/test/http/HttpClientFactoryTest.java
@@ -1,5 +1,6 @@
package at.gv.egiz.eaaf.core.test.http;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetAddress;
@@ -10,11 +11,13 @@ import java.security.Provider;
import java.security.cert.X509Certificate;
import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.CloseableHttpClient;
import org.junit.After;
import org.junit.Assert;
@@ -30,8 +33,11 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import at.gv.egiz.eaaf.core.exceptions.EaafException;
import at.gv.egiz.eaaf.core.impl.credential.EaafKeyStoreFactory;
import at.gv.egiz.eaaf.core.impl.data.Pair;
+import at.gv.egiz.eaaf.core.impl.data.Triple;
import at.gv.egiz.eaaf.core.impl.http.HttpClientConfiguration;
+import at.gv.egiz.eaaf.core.impl.http.HttpUtils;
import at.gv.egiz.eaaf.core.impl.http.IHttpClientFactory;
+import at.gv.egiz.eaaf.core.impl.utils.StreamUtils;
import okhttp3.HttpUrl;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
@@ -238,8 +244,9 @@ public class HttpClientFactoryTest {
//request webservice
final HttpUriRequest httpGet1 = new HttpPost(mockServerUrl.url().toString());
- final CloseableHttpResponse httpResp1 = client.execute(httpGet1);
- Assert.assertEquals("http statusCode", 200, httpResp1.getStatusLine().getStatusCode());
+ final StatusLine httpResp1 = client.execute(httpGet1,
+ HttpUtils.simpleStatusCodeResponseHandler());
+ Assert.assertEquals("http statusCode", 200, httpResp1.getStatusCode());
}
@@ -252,21 +259,26 @@ public class HttpClientFactoryTest {
final CloseableHttpClient client = httpClientFactory.getHttpClient(config);
Assert.assertNotNull("No httpClient", client);
-
+
mockWebServer = new MockWebServer();
mockServerUrl = mockWebServer.url("/sp/junit");
mockWebServer.enqueue(new MockResponse()
.setSocketPolicy(SocketPolicy.NO_RESPONSE)
.setResponseCode(HttpURLConnection.HTTP_NO_CONTENT));
+
+ String bodyData = RandomStringUtils.randomAlphanumeric(10);
mockWebServer.enqueue(new MockResponse().setResponseCode(200)
- .setBody("GetData"));
+ .setBody(bodyData));
//request webservice
final HttpUriRequest httpGet1 = new HttpGet(mockServerUrl.url().toString());
- final CloseableHttpResponse httpResp1 = client.execute(httpGet1);
- Assert.assertEquals("http statusCode", 200, httpResp1.getStatusLine().getStatusCode());
-
+ final Triple<StatusLine, ByteArrayInputStream, ContentType> httpResp1 = client.execute(httpGet1,
+ HttpUtils.bodyStatusCodeResponseHandler());
+ Assert.assertEquals("http statusCode", 200, httpResp1.getFirst().getStatusCode());
+ Assert.assertEquals("http statusCode", bodyData, new String(StreamUtils.readStream(httpResp1.getSecond())));
+
+
}
@Test