You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2025/03/07 19:46:57 UTC
(camel) branch camel-4.10.x updated: CAMEL-21847: camel-http should close http client for oauth token requests when stopping
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.10.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.10.x by this push:
new 0aab1c0eebb CAMEL-21847: camel-http should close http client for oauth token requests when stopping
0aab1c0eebb is described below
commit 0aab1c0eebb9e0c9e0029295d5ab2ade5dfd0bd3
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Mar 7 20:39:28 2025 +0100
CAMEL-21847: camel-http should close http client for oauth token requests when stopping
---
.../camel/component/http/CompositeHttpConfigurer.java | 15 ++++++++++++++-
.../org/apache/camel/component/http/HttpEndpoint.java | 4 ++--
.../camel/component/http/OAuth2ClientConfigurer.java | 19 +++++++++++++++++--
3 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/CompositeHttpConfigurer.java b/components/camel-http/src/main/java/org/apache/camel/component/http/CompositeHttpConfigurer.java
index 052ba009249..321307f65b8 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/CompositeHttpConfigurer.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/CompositeHttpConfigurer.java
@@ -19,9 +19,11 @@ package org.apache.camel.component.http;
import java.util.ArrayList;
import java.util.List;
+import org.apache.camel.support.service.ServiceHelper;
+import org.apache.camel.support.service.ServiceSupport;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
-public class CompositeHttpConfigurer implements HttpClientConfigurer {
+public class CompositeHttpConfigurer extends ServiceSupport implements HttpClientConfigurer {
private final List<HttpClientConfigurer> configurers = new ArrayList<>();
@@ -51,4 +53,15 @@ public class CompositeHttpConfigurer implements HttpClientConfigurer {
}
}
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ ServiceHelper.startService(configurers);
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ super.doStop();
+ ServiceHelper.stopService(configurers);
+ }
}
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
index 4129e00d2ea..21d2b289ecc 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
@@ -357,7 +357,7 @@ public class HttpEndpoint extends HttpCommonEndpoint implements LineNumberAware
httpActivityListener = new LoggingHttpActivityListener();
}
CamelContextAware.trySetCamelContext(httpActivityListener, getCamelContext());
- ServiceHelper.startService(httpActivityListener);
+ ServiceHelper.startService(httpActivityListener, httpClientConfigurer);
}
@Override
@@ -369,7 +369,7 @@ public class HttpEndpoint extends HttpCommonEndpoint implements LineNumberAware
if (httpClient instanceof Closeable closeable) {
IOHelper.close(closeable);
}
- ServiceHelper.stopService(httpActivityListener);
+ ServiceHelper.stopService(httpActivityListener, httpClientConfigurer);
super.doStop();
}
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/OAuth2ClientConfigurer.java b/components/camel-http/src/main/java/org/apache/camel/component/http/OAuth2ClientConfigurer.java
index ee29c73b8c6..3e360f9afdc 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/OAuth2ClientConfigurer.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/OAuth2ClientConfigurer.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.component.http;
+import java.io.Closeable;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -24,6 +25,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
+import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.json.DeserializationException;
import org.apache.camel.util.json.JsonObject;
import org.apache.camel.util.json.Jsoner;
@@ -39,7 +42,7 @@ import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.apache.hc.core5.http.protocol.HttpContext;
-public class OAuth2ClientConfigurer implements HttpClientConfigurer {
+public class OAuth2ClientConfigurer extends ServiceSupport implements HttpClientConfigurer {
private final String clientId;
private final String clientSecret;
@@ -49,6 +52,7 @@ public class OAuth2ClientConfigurer implements HttpClientConfigurer {
private final Long cachedTokensDefaultExpirySeconds;
private final Long cachedTokensExpirationMarginSeconds;
private final static Map<OAuth2URIAndCredentials, TokenCache> tokenCache = new HashMap<>();
+ private HttpClient httpClient;
public OAuth2ClientConfigurer(String clientId, String clientSecret, String tokenEndpoint, String scope, boolean cacheTokens,
long cachedTokensDefaultExpirySeconds, long cachedTokensExpirationMarginSeconds) {
@@ -63,7 +67,9 @@ public class OAuth2ClientConfigurer implements HttpClientConfigurer {
@Override
public void configureHttpClient(HttpClientBuilder clientBuilder) {
- HttpClient httpClient = clientBuilder.build();
+ // create a new http client only used for oauth token requests
+ this.httpClient = clientBuilder.build();
+
clientBuilder.addRequestInterceptorFirst((HttpRequest request, EntityDetails entity, HttpContext context) -> {
URI requestUri = getUriFromRequest(request);
OAuth2URIAndCredentials uriAndCredentials = new OAuth2URIAndCredentials(requestUri, clientId, clientSecret);
@@ -91,6 +97,7 @@ public class OAuth2ClientConfigurer implements HttpClientConfigurer {
}
private JsonObject getAccessTokenResponse(HttpClient httpClient) throws IOException {
+ String bodyStr = "grant_type=client_credentials";
String url = tokenEndpoint;
if (scope != null) {
String sep = "?";
@@ -184,4 +191,12 @@ public class OAuth2ClientConfigurer implements HttpClientConfigurer {
private record OAuth2URIAndCredentials(URI uri, String clientId, String clientSecret) {
}
+ @Override
+ protected void doStop() throws Exception {
+ super.doStop();
+ if (httpClient instanceof Closeable closeable) {
+ IOHelper.close(closeable);
+ httpClient = null;
+ }
+ }
}