diff --git a/pom.xml b/pom.xml index 6ac3af9..d3bd862 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.dtone.dvs dvs-apiclient - 2.0.2 + 2.0.3 jar dvs-apiclient @@ -51,9 +51,10 @@ test - org.apache.httpcomponents - httpclient - 4.5.13 + org.apache.httpcomponents.client5 + httpclient5 + 5.6.1 + compile diff --git a/src/main/java/com/dtone/dvs/service/RestApiInvokeService.java b/src/main/java/com/dtone/dvs/service/RestApiInvokeService.java index 2bd6981..da0c35f 100644 --- a/src/main/java/com/dtone/dvs/service/RestApiInvokeService.java +++ b/src/main/java/com/dtone/dvs/service/RestApiInvokeService.java @@ -3,22 +3,19 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; -import org.apache.http.HttpHeaders; -import org.apache.http.HttpResponse; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.apache.http.impl.client.HttpClientBuilder; - import com.dtone.dvs.dto.ApiRequest; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.hc.client5.http.auth.AuthScope; +import org.apache.hc.client5.http.auth.CredentialsProvider; +import org.apache.hc.client5.http.auth.UsernamePasswordCredentials; +import org.apache.hc.client5.http.classic.HttpClient; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.classic.methods.HttpPost; +import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.core5.http.*; +import org.apache.hc.core5.http.io.entity.StringEntity; public class RestApiInvokeService { @@ -30,9 +27,8 @@ public class RestApiInvokeService { public RestApiInvokeService(String apiKey, String apiSecret) { this.apiKey = apiKey; this.apiSecret = apiSecret; - - CredentialsProvider provider = new BasicCredentialsProvider(); - provider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(this.getApiKey(), this.getApiSecret())); + BasicCredentialsProvider provider = new BasicCredentialsProvider(); + provider.setCredentials(new AuthScope(null, null, -1,null, null), new UsernamePasswordCredentials(this.getApiKey(), this.getApiSecret().toCharArray())); final HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); httpClientBuilder.setDefaultCredentialsProvider(provider); httpClient = httpClientBuilder.build(); @@ -44,12 +40,12 @@ public RestApiInvokeService(String apiKey, String apiSecret, HttpClient httpClie this.httpClient = httpClient; } - public HttpResponse executeGet(String url) throws IOException { - return httpClient.execute(getHttpGet(url)); + public ClassicHttpResponse executeGet(String url) throws IOException { + return (ClassicHttpResponse) httpClient.execute(getHttpGet(url)); } - public HttpResponse executePost(String url, ApiRequest apiRequest) throws IOException { - return httpClient.execute(getHttpPost(url, apiRequest)); + public ClassicHttpResponse executePost(String url, ApiRequest apiRequest) throws IOException { + return (ClassicHttpResponse) httpClient.execute(getHttpPost(url, apiRequest)); } private static HttpPost getHttpPost(String url, ApiRequest apiRequest) @@ -65,7 +61,7 @@ private static HttpPost getHttpPost(String url, ApiRequest apiRequest) return httpPost; } - private static HttpGet getHttpGet(String url) { + private static ClassicHttpRequest getHttpGet(String url) { return new HttpGet(url); } diff --git a/src/main/java/com/dtone/dvs/util/ApiResponseBuilder.java b/src/main/java/com/dtone/dvs/util/ApiResponseBuilder.java index 55d4e70..9d73fdb 100644 --- a/src/main/java/com/dtone/dvs/util/ApiResponseBuilder.java +++ b/src/main/java/com/dtone/dvs/util/ApiResponseBuilder.java @@ -2,10 +2,6 @@ import java.io.IOException; -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; - import com.dtone.dvs.dto.ApiError; import com.dtone.dvs.dto.ApiResponse; import com.dtone.dvs.dto.ErrorResponse; @@ -17,6 +13,10 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpResponse; public class ApiResponseBuilder { @@ -34,29 +34,34 @@ public class ApiResponseBuilder { * @throws DvsApiException */ public ApiResponse prepareResponse(ApiResponse apiResponse, TypeReference typeReference, - HttpResponse response) throws IOException { - int statusCode = response.getStatusLine().getStatusCode(); - setPageDetails(apiResponse, response.getAllHeaders()); - - apiResponse.setCode(statusCode); - apiResponse.setSuccess(true); - HttpEntity httpEntity = response.getEntity(); + ClassicHttpResponse response) throws IOException { + try{ + int statusCode = response.getCode(); + setPageDetails(apiResponse, response.getHeaders()); - if (statusCode < 400) { - apiResponse.setResult(extractResult(httpEntity, typeReference)); - } else { - apiResponse.setSuccess(false); + apiResponse.setCode(statusCode); + apiResponse.setSuccess(true); + HttpEntity httpEntity = response.getEntity(); - if (httpEntity != null && response.getEntity().getContent().available() != 0) { - apiResponse.setErrors(extractResult(httpEntity, new TypeReference() { - }).getErrors()); + if (statusCode < 400) { + apiResponse.setResult(extractResult(httpEntity, typeReference)); } else { - apiResponse.getErrors() - .add(new ApiError(String.valueOf(statusCode), response.getStatusLine().getReasonPhrase())); - } + apiResponse.setSuccess(false); + if (httpEntity != null && response.getEntity().getContent().available() != 0) { + apiResponse.setErrors(extractResult(httpEntity, new TypeReference() { + }).getErrors()); + } else { + apiResponse.getErrors() + .add(new ApiError(String.valueOf(statusCode), response.getReasonPhrase())); + } + + } + return apiResponse; + } + finally { + response.close(); } - return apiResponse; } private static void setPageDetails(ApiResponse apiResponse, Header[] headers) { diff --git a/src/test/java/com/dtone/dvs/ApiResponseBuilderTest.java b/src/test/java/com/dtone/dvs/ApiResponseBuilderTest.java index 2824793..d3ee2a4 100644 --- a/src/test/java/com/dtone/dvs/ApiResponseBuilderTest.java +++ b/src/test/java/com/dtone/dvs/ApiResponseBuilderTest.java @@ -11,20 +11,18 @@ import java.io.InputStream; import java.util.List; -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.message.BasicHeader; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.message.BasicHeader; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import com.dtone.dvs.DvsApiClient; import com.dtone.dvs.dto.ApiResponse; import com.dtone.dvs.dto.Service; import com.dtone.dvs.util.ApiResponseBuilder; @@ -40,11 +38,10 @@ public class ApiResponseBuilderTest { HttpGet mockHttpGet = mock(HttpGet.class); DvsApiClient mockDvsClient = mock(DvsApiClient.class); HttpResponse mockHttpResponse = mock(HttpResponse.class); - StatusLine mockStatusLine = mock(StatusLine.class); HttpEntity mockHttpEntity = mock(HttpEntity.class); @Mock - HttpResponse httpResponse = mock(CloseableHttpResponse.class); + ClassicHttpResponse httpResponse = mock(ClassicHttpResponse.class); @Before public void setUp() throws Exception { @@ -54,10 +51,8 @@ public void setUp() throws Exception { @Test public void testHttpGetSuccessResponse() throws Exception { - when(httpResponse.getStatusLine()).thenReturn(mockStatusLine); - when(mockStatusLine.getStatusCode()).thenReturn(200); - - when(httpResponse.getAllHeaders()).thenReturn(MockTestUtils.getMockHttpHeaders()); + when(httpResponse.getCode()).thenReturn(200); + when(httpResponse.getHeaders()).thenReturn(MockTestUtils.getMockHttpHeaders()); when(httpResponse.getEntity()).thenReturn(mockHttpEntity); @@ -74,11 +69,10 @@ public void testHttpGetSuccessResponse() throws Exception { @Test public void testHttpGetFailureResponse() throws Exception { - when(httpResponse.getStatusLine()).thenReturn(mockStatusLine); - when(mockStatusLine.getStatusCode()).thenReturn(404); + when(httpResponse.getCode()).thenReturn(404); Header[] mockHeaders = new Header[] { new BasicHeader("a", "b") }; - when(httpResponse.getAllHeaders()).thenReturn(mockHeaders); + when(httpResponse.getHeaders()).thenReturn(mockHeaders); when(httpResponse.getEntity()).thenReturn(mockHttpEntity); @@ -98,12 +92,10 @@ public void testHttpGetFailureResponse() throws Exception { @Test public void testHttpGetFailureResponse429() throws Exception { - when(httpResponse.getStatusLine()).thenReturn(mockStatusLine); - when(mockStatusLine.getStatusCode()).thenReturn(429); - when(mockStatusLine.getReasonPhrase()).thenReturn("Too many requests"); + when(httpResponse.getCode()).thenReturn(429); Header[] mockHeaders = new Header[] { new BasicHeader("a", "b") }; - when(httpResponse.getAllHeaders()).thenReturn(mockHeaders); + when(httpResponse.getHeaders()).thenReturn(mockHeaders); when(httpResponse.getEntity()).thenReturn(mockHttpEntity); diff --git a/src/test/java/com/dtone/dvs/DvsApiClientTest.java b/src/test/java/com/dtone/dvs/DvsApiClientTest.java index 08f52ba..46b84e0 100644 --- a/src/test/java/com/dtone/dvs/DvsApiClientTest.java +++ b/src/test/java/com/dtone/dvs/DvsApiClientTest.java @@ -8,7 +8,7 @@ import java.util.Calendar; import java.util.List; -import org.apache.http.HttpStatus; +import org.apache.hc.core5.http.HttpStatus; import org.junit.After; import org.junit.Ignore; import org.junit.Test; diff --git a/src/test/java/com/dtone/dvs/RestApiInvokeServiceMockTest.java b/src/test/java/com/dtone/dvs/RestApiInvokeServiceMockTest.java index d8337ac..57e4503 100644 --- a/src/test/java/com/dtone/dvs/RestApiInvokeServiceMockTest.java +++ b/src/test/java/com/dtone/dvs/RestApiInvokeServiceMockTest.java @@ -4,9 +4,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import org.apache.http.HttpResponse; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.HttpClient; +import org.apache.hc.client5.http.ClientProtocolException; +import org.apache.hc.client5.http.classic.HttpClient; +import org.apache.hc.core5.http.ClassicHttpResponse; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; @@ -20,13 +20,13 @@ public class RestApiInvokeServiceMockTest { @Mock - HttpClient mockHttpClient = mock(HttpClient.class); + HttpClient mockHttpClient = mock(HttpClient.class); @InjectMocks RestApiInvokeService mockRestApiInvokeService = new RestApiInvokeService("", "", mockHttpClient); @Mock - HttpResponse mockHttpResponse = mock(HttpResponse.class); + ClassicHttpResponse mockHttpResponse = mock(ClassicHttpResponse.class); @Before public void setUp() throws Exception { @@ -62,5 +62,4 @@ public void testExecutePostException() throws Exception { when(mockRestApiInvokeService.getHttpClient().execute(Mockito.any())).thenThrow(new ClientProtocolException()); mockRestApiInvokeService.executePost("", new TransactionRequest()); } - } diff --git a/src/test/java/com/dtone/dvs/util/MockTestUtils.java b/src/test/java/com/dtone/dvs/util/MockTestUtils.java index 6999cad..10b519f 100644 --- a/src/test/java/com/dtone/dvs/util/MockTestUtils.java +++ b/src/test/java/com/dtone/dvs/util/MockTestUtils.java @@ -5,9 +5,6 @@ import java.util.ArrayList; import java.util.List; -import org.apache.http.Header; -import org.apache.http.message.BasicHeader; - import com.dtone.dvs.dto.ApiResponse; import com.dtone.dvs.dto.Balance; import com.dtone.dvs.dto.BenefitType; @@ -22,10 +19,9 @@ import com.dtone.dvs.dto.Service; import com.dtone.dvs.dto.TransactionRequest; import com.dtone.dvs.dto.Transaction; -import com.dtone.dvs.util.ApiResponseBuilder; -import com.dtone.dvs.util.Constants; -import com.dtone.dvs.util.ErrorCodes; import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.message.BasicHeader; public class MockTestUtils {