diff options
author | Thomas <> | 2023-08-31 20:37:42 +0200 |
---|---|---|
committer | Thomas <> | 2023-08-31 20:37:42 +0200 |
commit | e915685e22c7c084f7fd0c4870ff20d3f0194a91 (patch) | |
tree | 638deef490a63799ff48ca826ff8702b2efbee2a /eaaf_core_utils | |
parent | 5acc09000c59c93510567e88cb701919122dc5b2 (diff) | |
download | EAAF-Components-e915685e22c7c084f7fd0c4870ff20d3f0194a91.tar.gz EAAF-Components-e915685e22c7c084f7fd0c4870ff20d3f0194a91.tar.bz2 EAAF-Components-e915685e22c7c084f7fd0c4870ff20d3f0194a91.zip |
feat(core): refactor to openSAML 5 for Java 17
Diffstat (limited to 'eaaf_core_utils')
14 files changed, 226 insertions, 270 deletions
diff --git a/eaaf_core_utils/pom.xml b/eaaf_core_utils/pom.xml index 103e8b13..8d8bd116 100644 --- a/eaaf_core_utils/pom.xml +++ b/eaaf_core_utils/pom.xml @@ -65,12 +65,8 @@ <artifactId>commons-lang3</artifactId> </dependency> <dependency> - <groupId>org.apache.httpcomponents</groupId> - <artifactId>httpclient</artifactId> - </dependency> - <dependency> - <groupId>org.apache.httpcomponents</groupId> - <artifactId>httpcore</artifactId> + <groupId>org.apache.httpcomponents.client5</groupId> + <artifactId>httpclient5</artifactId> </dependency> <dependency> <groupId>com.google.code.findbugs</groupId> diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/credential/EaafKeyStoreFactory.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/credential/EaafKeyStoreFactory.java index 0ecdcc92..673a373d 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/credential/EaafKeyStoreFactory.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/credential/EaafKeyStoreFactory.java @@ -23,9 +23,6 @@ import java.security.cert.X509Certificate; import java.security.spec.InvalidKeySpecException; import java.security.spec.KeySpec; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.annotation.PostConstruct; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; @@ -46,6 +43,9 @@ import at.gv.egiz.eaaf.core.impl.credential.inline.InlineKeyStoreParser; import at.gv.egiz.eaaf.core.impl.data.Pair; import at.gv.egiz.eaaf.core.impl.utils.FileUtils; import at.gv.egiz.eaaf.core.impl.utils.KeyStoreUtils; +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; +import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafHttpRequestRetryHandler.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafHttpRequestRetryHandler.java index 3aa908e8..026b76c4 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafHttpRequestRetryHandler.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafHttpRequestRetryHandler.java @@ -5,12 +5,13 @@ import java.util.Arrays; import javax.net.ssl.SSLException; -import org.apache.http.client.HttpRequestRetryHandler; -import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; +import org.apache.hc.client5.http.HttpRequestRetryStrategy; +import org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy; +import org.apache.hc.core5.util.TimeValue; + +public class EaafHttpRequestRetryHandler extends DefaultHttpRequestRetryStrategy implements + HttpRequestRetryStrategy { -public class EaafHttpRequestRetryHandler extends DefaultHttpRequestRetryHandler implements - HttpRequestRetryHandler { - /** * Create the request retry handler using the following list of non-retriable. * IOException classes: <br> @@ -18,16 +19,22 @@ public class EaafHttpRequestRetryHandler extends DefaultHttpRequestRetryHandler * <li>UnknownHostException</li> * <li>SSLException</li> * </ul> - * - * @param retryCount how many times to retry; 0 means no retries - * @param requestSentRetryEnabled true if it's OK to retry non-idempotent - * requests that have been sent + * HTTP StatusCodes: + * <ul> + * <li>429</li> + * <li>502</li> + * </ul> + * After two seconds if no {@code Retry-After} header was set. + * + * @param retryCount how many times to retry; 0 means no retries */ - public EaafHttpRequestRetryHandler(final int retryCount, final boolean requestSentRetryEnabled) { - super(retryCount, requestSentRetryEnabled, Arrays.asList( - UnknownHostException.class, - SSLException.class)); - + public EaafHttpRequestRetryHandler(final int retryCount) { + super(retryCount, TimeValue.ofSeconds(2), + Arrays.asList( + UnknownHostException.class, + SSLException.class), + Arrays.asList(429, 502)); + } - + } diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafSslContextBuilder.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafSslContextBuilder.java index 1cd739de..d311982a 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafSslContextBuilder.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafSslContextBuilder.java @@ -29,10 +29,10 @@ import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509ExtendedKeyManager; import javax.net.ssl.X509TrustManager; -import org.apache.http.ssl.PrivateKeyDetails; -import org.apache.http.ssl.PrivateKeyStrategy; -import org.apache.http.ssl.SSLContextBuilder; -import org.apache.http.ssl.TrustStrategy; +import org.apache.hc.core5.ssl.PrivateKeyDetails; +import org.apache.hc.core5.ssl.PrivateKeyStrategy; +import org.apache.hc.core5.ssl.SSLContextBuilder; +import org.apache.hc.core5.ssl.TrustStrategy; import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider; /** @@ -380,7 +380,7 @@ public class EaafSslContextBuilder { public String chooseClientAlias( final String[] keyTypes, final Principal[] issuers, final Socket socket) { final Map<String, PrivateKeyDetails> validAliases = getClientAliasMap(keyTypes, issuers); - return this.aliasStrategy.chooseAlias(validAliases, socket); + return this.aliasStrategy.chooseAlias(validAliases, null); } @Override @@ -393,7 +393,7 @@ public class EaafSslContextBuilder { public String chooseServerAlias( final String keyType, final Principal[] issuers, final Socket socket) { final Map<String, PrivateKeyDetails> validAliases = getServerAliasMap(keyType, issuers); - return this.aliasStrategy.chooseAlias(validAliases, socket); + return this.aliasStrategy.chooseAlias(validAliases, null); } @Override diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafSslKeySelectionStrategy.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafSslKeySelectionStrategy.java index 3918c94e..f9f2f43d 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafSslKeySelectionStrategy.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/EaafSslKeySelectionStrategy.java @@ -1,11 +1,12 @@ package at.gv.egiz.eaaf.core.impl.http; -import java.net.Socket; import java.util.Map; +import javax.net.ssl.SSLParameters; + import org.apache.commons.lang3.StringUtils; -import org.apache.http.ssl.PrivateKeyDetails; -import org.apache.http.ssl.PrivateKeyStrategy; +import org.apache.hc.core5.ssl.PrivateKeyDetails; +import org.apache.hc.core5.ssl.PrivateKeyStrategy; import lombok.extern.slf4j.Slf4j; @@ -31,7 +32,7 @@ public class EaafSslKeySelectionStrategy implements PrivateKeyStrategy { } @Override - public String chooseAlias(Map<String, PrivateKeyDetails> aliases, Socket socket) { + public String chooseAlias(Map<String, PrivateKeyDetails> aliases, SSLParameters sslParameters) { log.trace("Selection SSL client-auth key for alias: {}", keyAlias); if (aliases.keySet().isEmpty()) { log.debug("No Key with Alias: {} in empty KeyStore", keyAlias); diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientConfiguration.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientConfiguration.java index c189ff74..4d808f2b 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientConfiguration.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientConfiguration.java @@ -7,8 +7,8 @@ import java.util.UUID; import javax.annotation.Nonnull; import org.apache.commons.lang3.StringUtils; -import org.apache.http.HttpRequestInterceptor; -import org.apache.http.client.ServiceUnavailableRetryStrategy; +import org.apache.hc.client5.http.HttpRequestRetryStrategy; +import org.apache.hc.core5.http.HttpRequestInterceptor; import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException; import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration; @@ -67,9 +67,6 @@ public class HttpClientConfiguration { private int httpErrorRetryCount = 3; @Setter - private boolean httpErrorRetryPost = false; - - @Setter private int connectTimeout = -1; @Setter @@ -79,7 +76,7 @@ public class HttpClientConfiguration { private int socketTimeout = -1; @Setter - private ServiceUnavailableRetryStrategy serviceUnavailStrategy = null; + private HttpRequestRetryStrategy serviceUnavailStrategy = null; /** * List of {@link HttpRequestInterceptor} that are added first to HTTP client. diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientFactory.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientFactory.java index f2955482..715b0c96 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientFactory.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientFactory.java @@ -1,10 +1,10 @@ package at.gv.egiz.eaaf.core.impl.http; +import java.net.URI; import java.security.KeyStore; import java.security.Provider; import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; @@ -13,35 +13,34 @@ import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import org.apache.commons.lang3.StringUtils; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.ProtocolException; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.client.RedirectStrategy; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.config.Registry; -import org.apache.http.config.RegistryBuilder; -import org.apache.http.config.SocketConfig; -import org.apache.http.conn.HttpClientConnectionManager; -import org.apache.http.conn.socket.ConnectionSocketFactory; -import org.apache.http.conn.socket.LayeredConnectionSocketFactory; -import org.apache.http.conn.socket.PlainConnectionSocketFactory; -import org.apache.http.conn.ssl.NoopHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.DefaultRedirectStrategy; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.BasicHttpClientConnectionManager; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.protocol.HttpContext; -import org.apache.http.ssl.SSLContexts; +import org.apache.hc.client5.http.auth.AuthScope; +import org.apache.hc.client5.http.auth.UsernamePasswordCredentials; +import org.apache.hc.client5.http.config.ConnectionConfig; +import org.apache.hc.client5.http.config.RequestConfig; +import org.apache.hc.client5.http.impl.DefaultRedirectStrategy; +import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; +import org.apache.hc.client5.http.io.HttpClientConnectionManager; +import org.apache.hc.client5.http.protocol.RedirectStrategy; +import org.apache.hc.client5.http.socket.ConnectionSocketFactory; +import org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory; +import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory; +import org.apache.hc.client5.http.ssl.NoopHostnameVerifier; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.config.Registry; +import org.apache.hc.core5.http.config.RegistryBuilder; +import org.apache.hc.core5.http.io.SocketConfig; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.ssl.SSLContexts; +import org.apache.hc.core5.util.TimeValue; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; import at.gv.egiz.eaaf.core.api.idp.IConfiguration; import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException; @@ -74,8 +73,6 @@ public class HttpClientFactory implements IHttpClientFactory { "client.http.connection.timeout.request"; public static final String PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT = "client.http.connection.retry.count"; - public static final String PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST = - "client.http.connection.retry.post"; public static final String PROP_CONFIG_CLIENT_HTTP_SSL_HOSTNAMEVERIFIER_TRUSTALL = "client.http.ssl.hostnameverifier.trustall"; @@ -102,15 +99,13 @@ public class HttpClientFactory implements IHttpClientFactory { public static final String DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXTOTAL = "500"; public static final String DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXPERROUTE = "100"; public static final String DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT = "3"; - public static final String DEFAUTL_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST = String.valueOf(false); public static final int DEFAULT_CLEANUP_RUNNER_TIME = 30000; public static final int DEFAULT_CLEANUP_IDLE_TIME = 60; - - + private String defaultConfigurationId = null; - private final Map<String, Pair<HttpClientBuilder, HttpClientConnectionManager>> - availableBuilders = new HashMap<>(); + private final Map<String, Pair<HttpClientBuilder, HttpClientConnectionManager>> availableBuilders = + new HashMap<>(); /* * (non-Javadoc) @@ -156,17 +151,21 @@ public class HttpClientFactory implements IHttpClientFactory { final LayeredConnectionSocketFactory sslConnectionFactory = getSslContext(config); // set pool connection if required - HttpClientConnectionManager connectionManager - = injectConnectionManager(builder, sslConnectionFactory); + final HttpClientConnectionManager connectionManager = injectConnectionManager(builder, + sslConnectionFactory); + + // set evication for connection pool + builder.evictExpiredConnections(); + builder.evictIdleConnections(TimeValue.ofSeconds(DEFAULT_CLEANUP_IDLE_TIME)); - // set interceptor + // set interceptor if (config.getMessageInterceptors() != null) { for (int i = config.getMessageInterceptors().size() - 1; i >= 0; i--) { - builder.addInterceptorFirst(config.getMessageInterceptors().get(i)); - - } + builder.addRequestInterceptorFirst(config.getMessageInterceptors().get(i)); + + } } - + availableBuilders.put(config.getUuid(), Pair.newInstance(builder, connectionManager)); } @@ -176,38 +175,17 @@ public class HttpClientFactory implements IHttpClientFactory { } - /** - * Worker that closes expired connections or connections that in idle - * for more than DEFAULT_CLEANUP_IDLE_TIME seconds. - * - */ - @Scheduled(fixedDelay = DEFAULT_CLEANUP_RUNNER_TIME) - private void httpConnectionPoolCleaner() { - log.trace("Starting http connection-pool eviction policy ... "); - for (final Entry<String, Pair<HttpClientBuilder, HttpClientConnectionManager>> el - : availableBuilders.entrySet()) { - log.trace("Checking connections of http-client: {}", el.getKey()); - el.getValue().getSecond().closeExpiredConnections(); - el.getValue().getSecond().closeIdleConnections(DEFAULT_CLEANUP_IDLE_TIME, TimeUnit.SECONDS); - - } - - } - private void injectInternalRetryHandler(HttpClientBuilder builder, HttpClientConfiguration config) { - if (config.getHttpErrorRetryCount() > 0) { + if (config.getServiceUnavailStrategy() != null) { + log.debug("HttpClient configuration: {} set custom ServiceUnavailableRetryStrategy: {}", + config.getFriendlyName(), config.getServiceUnavailStrategy().getClass().getName()); + builder.setRetryStrategy(config.getServiceUnavailStrategy()); + + } else if (config.getHttpErrorRetryCount() > 0) { log.info("Set HTTP error-retry to {} for http-client: {}", config.getHttpErrorRetryCount(), config.getFriendlyName()); - builder.setRetryHandler(new EaafHttpRequestRetryHandler( - config.getHttpErrorRetryCount(), - config.isHttpErrorRetryPost())); - - if (config.getServiceUnavailStrategy() != null) { - log.debug("HttpClient configuration: {} set custom ServiceUnavailableRetryStrategy: {}", - config.getFriendlyName(), config.getServiceUnavailStrategy().getClass().getName()); - builder.setServiceUnavailableRetryStrategy(config.getServiceUnavailStrategy()); - - } + builder.setRetryStrategy(new EaafHttpRequestRetryHandler( + config.getHttpErrorRetryCount())); } else { log.info("Disable HTTP error-retry for http-client: {}", config.getFriendlyName()); @@ -237,12 +215,12 @@ public class HttpClientFactory implements IHttpClientFactory { getSslContext(defaultHttpClientConfig); // set pool connection if required - HttpClientConnectionManager connectionManager - = injectConnectionManager(defaultHttpClientBuilder, sslConnectionFactory); + final HttpClientConnectionManager connectionManager = injectConnectionManager(defaultHttpClientBuilder, + sslConnectionFactory); // set default http client builder defaultConfigurationId = defaultHttpClientConfig.getUuid(); - availableBuilders.put(defaultConfigurationId, + availableBuilders.put(defaultConfigurationId, Pair.newInstance(defaultHttpClientBuilder, connectionManager)); } @@ -281,9 +259,6 @@ public class HttpClientFactory implements IHttpClientFactory { config.setHttpErrorRetryCount(Integer.parseInt(basicConfig.getBasicConfiguration( PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT, DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT))); - config.setHttpErrorRetryPost(Boolean.parseBoolean(basicConfig.getBasicConfiguration( - PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST, - DEFAUTL_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST))); // validate configuration object config.validate(); @@ -294,25 +269,29 @@ public class HttpClientFactory implements IHttpClientFactory { private void injectBasicAuthenticationIfRequired(HttpClientBuilder builder, final HttpClientConfiguration httpClientConfig) { if (httpClientConfig.getAuthMode().equals(HttpClientConfiguration.ClientAuthMode.PASSWORD)) { - final CredentialsProvider provider = new BasicCredentialsProvider(); + final BasicCredentialsProvider provider = new BasicCredentialsProvider(); log.trace("Injecting basic authentication with username: {} and password: {}", httpClientConfig.getUsername(), httpClientConfig.getPassword()); + final UsernamePasswordCredentials credentials = new UsernamePasswordCredentials( - httpClientConfig.getUsername(), httpClientConfig.getPassword()); + httpClientConfig.getUsername(), + httpClientConfig.getPassword() != null + ? httpClientConfig.getPassword().toCharArray() + : "".toCharArray()); - final AuthScope scope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM); + final AuthScope scope = new AuthScope(null, null, -1, null, null); provider.setCredentials(scope, credentials); builder.setDefaultCredentialsProvider(provider); log.info("Basic http authentication was injected with username: {}", httpClientConfig.getUsername()); if (httpClientConfig.isEnablePreEmptiveHttpBasicAuth()) { - log.info("Inject pre-emptive HTTP Basic-Auth interceptor for client: {}", + log.info("Inject pre-emptive HTTP Basic-Auth interceptor for client: {}", httpClientConfig.getFriendlyName()); - builder.addInterceptorFirst(new PreemptiveAuthInterceptor()); - + builder.addRequestInterceptorFirst(new PreemptiveAuthInterceptor()); + } - + } else { log.trace("Injection of Http Basic authentication was skipped"); @@ -360,50 +339,49 @@ public class HttpClientFactory implements IHttpClientFactory { HttpClientBuilder builder, final LayeredConnectionSocketFactory sslConnectionFactory) { if (basicConfig.getBasicConfigurationBoolean(PROP_CONFIG_CLIENT_HTTP_CONNECTION_POOL_USE, true)) { - PoolingHttpClientConnectionManager connectionPool - = new PoolingHttpClientConnectionManager(getDefaultRegistry(sslConnectionFactory)); + final PoolingHttpClientConnectionManager connectionPool = new PoolingHttpClientConnectionManager( + getDefaultRegistry(sslConnectionFactory)); connectionPool.setDefaultMaxPerRoute(Integer.parseInt( basicConfig.getBasicConfiguration(PROP_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXPERROUTE, DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXPERROUTE))); connectionPool.setMaxTotal(Integer.parseInt( basicConfig.getBasicConfiguration(PROP_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXTOTAL, DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXTOTAL))); - connectionPool.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(Integer.parseInt( - basicConfig.getBasicConfiguration(PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_SOCKET, - DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_SOCKET)) - * 1000).build()); + connectionPool.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout( + Integer.parseInt( + basicConfig.getBasicConfiguration( + PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_SOCKET, + DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_SOCKET)), TimeUnit.SECONDS).build()); + connectionPool.setDefaultConnectionConfig(ConnectionConfig.custom() + .setConnectTimeout( + Long.parseLong(basicConfig.getBasicConfiguration( + PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_CONNECTION, + DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_CONNECTION)), TimeUnit.SECONDS) + .build()); + builder.setConnectionManager(connectionPool); - log.debug("Initalize http-client pool with, maxTotal: {} maxPerRoute: {}", + log.debug("Initalize http-client pool with, maxTotal: {} maxPerRoute: {}", connectionPool.getMaxTotal(), connectionPool.getDefaultMaxPerRoute()); return connectionPool; - + } else { log.debug("Building http-client without Connection-Pool ... "); final BasicHttpClientConnectionManager basicPool = new BasicHttpClientConnectionManager( - getDefaultRegistry(sslConnectionFactory)); - builder.setConnectionManager(basicPool); + getDefaultRegistry(sslConnectionFactory)); + builder.setConnectionManager(basicPool); return basicPool; - + } - + } private RequestConfig buildDefaultRequestConfig(HttpClientConfiguration config) { final RequestConfig requestConfig = RequestConfig.custom() - .setConnectTimeout(selectTimeoutFromConfig(config.getConnectTimeout(), - Integer.parseInt(basicConfig.getBasicConfiguration( - PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_CONNECTION, - DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_CONNECTION)) * 1000)) .setConnectionRequestTimeout(selectTimeoutFromConfig(config.getConnectionRequestTimeout(), Integer.parseInt(basicConfig.getBasicConfiguration( - PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_REQUEST, - DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_REQUEST)) * 1000)) - .setSocketTimeout(selectTimeoutFromConfig(config.getSocketTimeout(), - Integer.parseInt(basicConfig.getBasicConfiguration( - PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_SOCKET, - DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_SOCKET)) - * 1000)) + PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_REQUEST, + DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_REQUEST))), TimeUnit.SECONDS) .build(); return requestConfig; @@ -420,14 +398,14 @@ public class HttpClientFactory implements IHttpClientFactory { redirectStrategy = new RedirectStrategy() { @Override - public boolean isRedirected(final HttpRequest request, final HttpResponse response, - final HttpContext context) throws ProtocolException { + public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) + throws HttpException { return false; } @Override - public HttpUriRequest getRedirect(final HttpRequest request, final HttpResponse response, - final HttpContext context) throws ProtocolException { + public URI getLocationURI(HttpRequest request, HttpResponse response, HttpContext context) + throws HttpException { return null; } }; @@ -435,7 +413,7 @@ public class HttpClientFactory implements IHttpClientFactory { return redirectStrategy; } - + private static Registry<ConnectionSocketFactory> getDefaultRegistry( final LayeredConnectionSocketFactory sslConnectionFactory) { final RegistryBuilder<ConnectionSocketFactory> builder = 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 dd6f69ee..caa73e04 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 @@ -31,24 +31,25 @@ import java.security.UnrecoverableKeyException; import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.net.ssl.SSLContext; -import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -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.TrustStrategy; -import org.apache.http.util.EntityUtils; +import org.apache.hc.client5.http.ClientProtocolException; +import org.apache.hc.client5.http.ssl.TrustAllStrategy; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.io.HttpClientResponseHandler; +import org.apache.hc.core5.http.io.entity.EntityUtils; +import org.apache.hc.core5.http.message.StatusLine; +import org.apache.hc.core5.ssl.TrustStrategy; 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 jakarta.servlet.http.HttpServletRequest; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; @@ -62,13 +63,13 @@ public class HttpUtils { * * @return Status-Code of http response */ - public static ResponseHandler<StatusLine> simpleStatusCodeResponseHandler() { - return new ResponseHandler<StatusLine>() { + public static HttpClientResponseHandler<StatusLine> simpleStatusCodeResponseHandler() { + return new HttpClientResponseHandler<StatusLine>() { + @Override - public StatusLine handleResponse(HttpResponse response) throws ClientProtocolException, IOException { + public StatusLine handleResponse(ClassicHttpResponse response) throws HttpException, IOException { EntityUtils.consumeQuietly(response.getEntity()); - return response.getStatusLine(); - + return new StatusLine(response); } }; } @@ -80,15 +81,17 @@ public class HttpUtils { * @return {@link Triple} of http response {@link StatusLine}, http body as {@link InputStream}, * and {@link ContentType} */ - public static ResponseHandler<Triple<StatusLine, ByteArrayInputStream, ContentType>> + public static HttpClientResponseHandler<Triple<StatusLine, ByteArrayInputStream, ContentType>> bodyStatusCodeResponseHandler() { - return new ResponseHandler<Triple<StatusLine, ByteArrayInputStream, ContentType>>() { + return new HttpClientResponseHandler<Triple<StatusLine, ByteArrayInputStream, ContentType>>() { @Override - public Triple<StatusLine, ByteArrayInputStream, ContentType> handleResponse(HttpResponse response) + public Triple<StatusLine, ByteArrayInputStream, ContentType> handleResponse( + ClassicHttpResponse response) throws ClientProtocolException, IOException { byte[] bodyBytes = EntityUtils.toByteArray(response.getEntity()); - return Triple.newInstance(response.getStatusLine(), new ByteArrayInputStream(bodyBytes), - ContentType.getOrDefault(response.getEntity())); + + return Triple.newInstance(new StatusLine(response), new ByteArrayInputStream(bodyBytes), + ContentType.parse(response.getEntity().getContentType())); } }; diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/IHttpClientFactory.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/IHttpClientFactory.java index 4e8374e1..232006d8 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/IHttpClientFactory.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/IHttpClientFactory.java @@ -2,7 +2,7 @@ package at.gv.egiz.eaaf.core.impl.http; import javax.annotation.Nonnull; -import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import at.gv.egiz.eaaf.core.exceptions.EaafException; diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/interceptor/PreemptiveAuthInterceptor.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/interceptor/PreemptiveAuthInterceptor.java index 5edc8cac..ac8c2312 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/interceptor/PreemptiveAuthInterceptor.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/interceptor/PreemptiveAuthInterceptor.java @@ -2,18 +2,19 @@ package at.gv.egiz.eaaf.core.impl.http.interceptor; import java.io.IOException; -import org.apache.http.HttpException; -import org.apache.http.HttpHost; -import org.apache.http.HttpRequest; -import org.apache.http.HttpRequestInterceptor; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.AuthState; -import org.apache.http.auth.Credentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.impl.auth.BasicScheme; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpCoreContext; +import org.apache.hc.client5.http.auth.AuthExchange; +import org.apache.hc.client5.http.auth.AuthScope; +import org.apache.hc.client5.http.auth.Credentials; +import org.apache.hc.client5.http.auth.CredentialsProvider; +import org.apache.hc.client5.http.impl.auth.BasicScheme; +import org.apache.hc.client5.http.protocol.HttpClientContext; +import org.apache.hc.core5.http.EntityDetails; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpHeaders; +import org.apache.hc.core5.http.HttpHost; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpRequestInterceptor; +import org.apache.hc.core5.http.protocol.HttpContext; import lombok.extern.slf4j.Slf4j; @@ -27,29 +28,35 @@ import lombok.extern.slf4j.Slf4j; public class PreemptiveAuthInterceptor implements HttpRequestInterceptor { @Override - public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { - final AuthState authState = (AuthState) context.getAttribute(HttpClientContext.TARGET_AUTH_STATE); + public void process(HttpRequest request, EntityDetails entity, HttpContext context) throws HttpException, + IOException { + log.trace("Executing {}", PreemptiveAuthInterceptor.class.getSimpleName()); + // final AuthState authState = (AuthState) + // context.getAttribute(HttpClientContext.TARGET_AUTH_STATE); + + HttpHost targetHost = ((HttpClientContext) context).getHttpRoute().getTargetHost(); + AuthExchange authState = ((HttpClientContext) context).getAuthExchange(targetHost); // If no auth scheme available yet, try to initialize it // preemptively if (authState.getAuthScheme() == null) { - final CredentialsProvider credentialsProvider = - (CredentialsProvider) context.getAttribute(HttpClientContext.CREDS_PROVIDER); - final HttpHost targetHost = (HttpHost) context.getAttribute(HttpCoreContext.HTTP_TARGET_HOST); - + final CredentialsProvider credentialsProvider = ((HttpClientContext) context).getCredentialsProvider(); + final Credentials credentials = credentialsProvider.getCredentials( - new AuthScope(targetHost.getHostName(), targetHost.getPort())); + new AuthScope(targetHost.getHostName(), targetHost.getPort()), + context); if (credentials == null) { log.warn("Find HTTP credential-provider but not credential matches. " + "Use it as it is and looking what happend"); - + } else { log.trace("Updating HTTP basic-auth state to pre-emptive credentials ... "); - authState.update(new BasicScheme(), credentials); - - } + BasicScheme basicAuthSchema = new BasicScheme(); + basicAuthSchema.initPreemptive(credentials); + request.setHeader(HttpHeaders.AUTHORIZATION, + basicAuthSchema.generateAuthResponse(targetHost, request, context)); + + } } - } - } diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/utils/Random.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/utils/Random.java index aedbbb7f..6c0a288f 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/utils/Random.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/utils/Random.java @@ -19,16 +19,16 @@ package at.gv.egiz.eaaf.core.impl.utils; -import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang3.ArrayUtils; +import org.apache.hc.client5.http.utils.Hex; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -83,19 +83,14 @@ public class Random { // generate ID String returnValue; - try { - returnValue = preFix + new String(Hex.encodeHex(ArrayUtils.addAll(now.getBytes("UTF-8"), randValue))); - - // 20 bytes = 160 bits - if (returnValue.length() > 40) { - return returnValue.substring(0, 40); - } else { - return returnValue; - } - - } catch (final UnsupportedEncodingException e) { - throw new RuntimeException(e); - + returnValue = preFix + new String(Hex.encodeHexString( + ArrayUtils.addAll(now.getBytes(StandardCharsets.UTF_8), randValue))); + + // 20 bytes = 160 bits + if (returnValue.length() > 40) { + return returnValue.substring(0, 40); + } else { + return returnValue; } } @@ -106,7 +101,7 @@ public class Random { * @return random hex encoded value [256bit] */ public static String nextHexRandom32() { - return new String(Hex.encodeHex(nextByteRandom(32))); // 32 bytes = 256 bits + return new String(Hex.encodeHexString(nextByteRandom(32))); // 32 bytes = 256 bits } @@ -116,7 +111,7 @@ public class Random { * @return random hex encoded value [128bit] */ public static String nextHexRandom16() { - return new String(Hex.encodeHex(nextByteRandom(16))); // 16 bytes = 128 bits + return new String(Hex.encodeHexString(nextByteRandom(16))); // 16 bytes = 128 bits } diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/utils/ServletUtils.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/utils/ServletUtils.java index c8865465..cf044d43 100644 --- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/utils/ServletUtils.java +++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/utils/ServletUtils.java @@ -19,7 +19,7 @@ package at.gv.egiz.eaaf.core.impl.utils; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; public class ServletUtils { diff --git a/eaaf_core_utils/src/test/java/at/gv/egiz/eaaf/core/test/http/HttpClientFactoryProdHostTest.java b/eaaf_core_utils/src/test/java/at/gv/egiz/eaaf/core/test/http/HttpClientFactoryProdHostTest.java index 3d7ede90..170ddff9 100644 --- a/eaaf_core_utils/src/test/java/at/gv/egiz/eaaf/core/test/http/HttpClientFactoryProdHostTest.java +++ b/eaaf_core_utils/src/test/java/at/gv/egiz/eaaf/core/test/http/HttpClientFactoryProdHostTest.java @@ -11,12 +11,13 @@ import java.security.UnrecoverableKeyException; import java.security.cert.CertificateEncodingException; import org.apache.commons.lang3.RandomStringUtils; -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.HttpUriRequest; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.util.EntityUtils; +import org.apache.hc.client5.http.ClientProtocolException; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.classic.methods.HttpUriRequest; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; +import org.apache.hc.core5.http.ParseException; +import org.apache.hc.core5.http.io.entity.EntityUtils; import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider; import org.junit.Assert; import org.junit.Before; @@ -73,7 +74,7 @@ public class HttpClientFactoryProdHostTest { @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) public void getCustomClientX509AuthWithHsmFacadeTrustStore() throws EaafException, ClientProtocolException, IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, - CertificateEncodingException { + CertificateEncodingException, ParseException { System.setProperty("javax.net.debug", "ssl:handshake"); final HttpClientConfiguration clientConfig = new HttpClientConfiguration( @@ -89,7 +90,7 @@ public class HttpClientFactoryProdHostTest { //perform test request final HttpUriRequest httpGet3 = new HttpGet("https://vollmachten.egiz.gv.at/mms-eid-test/services/GetMandatesService?wsdl"); final CloseableHttpResponse httpResp3 = client.execute(httpGet3); - Assert.assertEquals("http statusCode", 200, httpResp3.getStatusLine().getStatusCode()); + Assert.assertEquals("http statusCode", 200, httpResp3.getCode()); String body = EntityUtils.toString(httpResp3.getEntity()); assertFalse("no http body", body.isEmpty()); assertTrue("no WSDL", body.contains("name=\"GetMandatesOperation\"")); 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 7f3982be..269c516e 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 @@ -18,14 +18,14 @@ import java.security.UnrecoverableKeyException; 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.apache.hc.client5.http.ClientProtocolException; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.classic.methods.HttpPost; +import org.apache.hc.client5.http.classic.methods.HttpUriRequest; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.message.StatusLine; import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; @@ -148,7 +148,7 @@ public class HttpClientFactoryTest { //request webservice final HttpUriRequest httpGet1 = new HttpGet(mockServerUrl.url().toString()); final CloseableHttpResponse httpResp1 = client.execute(httpGet1); - Assert.assertEquals("http statusCode", 200, httpResp1.getStatusLine().getStatusCode()); + Assert.assertEquals("http statusCode", 200, httpResp1.getCode()); } @@ -202,7 +202,7 @@ public class HttpClientFactoryTest { //request webservice final HttpUriRequest httpGet2 = new HttpGet(mockServerUrl.url().toString()); final CloseableHttpResponse httpResp2 = client.execute(httpGet2); - Assert.assertEquals("http statusCode", 200, httpResp2.getStatusLine().getStatusCode()); + Assert.assertEquals("http statusCode", 200, httpResp2.getCode()); //check request contains basic authentication after authentication was requested final RecordedRequest httpReq1 = mockWebServer.takeRequest(); @@ -233,7 +233,7 @@ public class HttpClientFactoryTest { //request webservice final HttpUriRequest httpGet2 = new HttpGet(mockServerUrl.url().toString()); final CloseableHttpResponse httpResp2 = client.execute(httpGet2); - Assert.assertEquals("http statusCode", 200, httpResp2.getStatusLine().getStatusCode()); + Assert.assertEquals("http statusCode", 200, httpResp2.getCode()); //check request contains basic authentication after authentication was requested final RecordedRequest httpReq1 = mockWebServer.takeRequest(); @@ -262,7 +262,6 @@ public class HttpClientFactoryTest { final HttpClientConfiguration config = new HttpClientConfiguration("jUnit_retry_" + RandomStringUtils.randomAlphabetic(3)); config.setHttpErrorRetryCount(2); - config.setHttpErrorRetryPost(false); final CloseableHttpClient client = httpClientFactory.getHttpClient(config); Assert.assertNotNull("No httpClient", client); @@ -290,34 +289,6 @@ public class HttpClientFactoryTest { } @Test - public void httpPostRetryOneTime() throws EaafException, InterruptedException, - ClientProtocolException, IOException { - final HttpClientConfiguration config = - new HttpClientConfiguration("jUnit_retry_" + RandomStringUtils.randomAlphabetic(3)); - config.setHttpErrorRetryCount(2); - config.setHttpErrorRetryPost(true); - - 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)); - mockWebServer.enqueue(new MockResponse().setResponseCode(200) - .setBody("GetData")); - - //request webservice - final HttpUriRequest httpGet1 = new HttpPost(mockServerUrl.url().toString()); - final StatusLine httpResp1 = client.execute(httpGet1, - HttpUtils.simpleStatusCodeResponseHandler()); - Assert.assertEquals("http statusCode", 200, httpResp1.getStatusCode()); - - } - - @Test public void testHttpClientRetryOneTime() throws EaafException, InterruptedException, ClientProtocolException, IOException { final HttpClientConfiguration config = @@ -373,7 +344,7 @@ public class HttpClientFactoryTest { //request webservice final HttpUriRequest httpGet1 = new HttpGet(mockServerUrl.url().toString()); final CloseableHttpResponse httpResp1 = client.execute(httpGet1); - Assert.assertEquals("http statusCode", 200, httpResp1.getStatusLine().getStatusCode()); + Assert.assertEquals("http statusCode", 200, httpResp1.getCode()); } @@ -543,7 +514,7 @@ public class HttpClientFactoryTest { //perform test request final HttpUriRequest httpGet2 = new HttpGet(mockServerUrl.url().toString()); final CloseableHttpResponse httpResp2 = client.execute(httpGet2); - Assert.assertEquals("http statusCode", 200, httpResp2.getStatusLine().getStatusCode()); + Assert.assertEquals("http statusCode", 200, httpResp2.getCode()); } @@ -612,7 +583,7 @@ public class HttpClientFactoryTest { //perform test request final HttpUriRequest httpGet2 = new HttpGet(mockServerUrl.url().toString()); final CloseableHttpResponse httpResp2 = client.execute(httpGet2); - Assert.assertEquals("http statusCode", 200, httpResp2.getStatusLine().getStatusCode()); + Assert.assertEquals("http statusCode", 200, httpResp2.getCode()); } @@ -658,7 +629,7 @@ public class HttpClientFactoryTest { //perform test request final HttpUriRequest httpGet2 = new HttpGet(mockServerUrl.url().toString()); final CloseableHttpResponse httpResp2 = client.execute(httpGet2); - Assert.assertEquals("http statusCode", 200, httpResp2.getStatusLine().getStatusCode()); + Assert.assertEquals("http statusCode", 200, httpResp2.getCode()); } @@ -721,7 +692,7 @@ public class HttpClientFactoryTest { //perform test request final HttpUriRequest httpGet2 = new HttpGet(mockServerUrl.url().toString()); final CloseableHttpResponse httpResp2 = client.execute(httpGet2); - Assert.assertEquals("http statusCode", 200, httpResp2.getStatusLine().getStatusCode()); + Assert.assertEquals("http statusCode", 200, httpResp2.getCode()); } |