This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 7c4a520ee7f CAMEL-20447: camel-platform-http-main should not depend on
jolokia but load it via the plugin. (#13248)
7c4a520ee7f is described below
commit 7c4a520ee7f7cae862b137c8717dba18e995eb29
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Feb 21 16:09:21 2024 +0100
CAMEL-20447: camel-platform-http-main should not depend on jolokia but load
it via the plugin. (#13248)
---
components/camel-platform-http-jolokia/pom.xml | 12 +++
.../plugin/DefaultJolokiaPlatformHttpPlugin.java | 88 ++++++++++++++++++++--
.../DefaultJolokiaPlatformHttpPluginTest.java | 3 +-
.../platform/http/main/MainHttpServer.java | 68 +----------------
components/camel-platform-http/pom.xml | 7 --
.../http/plugin/JolokiaPlatformHttpPlugin.java | 6 +-
6 files changed, 99 insertions(+), 85 deletions(-)
diff --git a/components/camel-platform-http-jolokia/pom.xml
b/components/camel-platform-http-jolokia/pom.xml
index 974b51fc0b2..ebc337e233f 100644
--- a/components/camel-platform-http-jolokia/pom.xml
+++ b/components/camel-platform-http-jolokia/pom.xml
@@ -47,6 +47,18 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-platform-http</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.vertx</groupId>
+ <artifactId>vertx-web</artifactId>
+ <version>${vertx-version}</version>
+ </dependency>
+
+ <!-- jolokia -->
+ <dependency>
+ <groupId>org.jolokia</groupId>
+ <artifactId>jolokia-agent-jvm</artifactId>
+ <version>${jolokia-version}</version>
+ </dependency>
<!-- json -->
<dependency>
diff --git
a/components/camel-platform-http-jolokia/src/main/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPlugin.java
b/components/camel-platform-http-jolokia/src/main/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPlugin.java
index 7701a57b6fd..6cc3a4ae9c4 100644
---
a/components/camel-platform-http-jolokia/src/main/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPlugin.java
+++
b/components/camel-platform-http-jolokia/src/main/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPlugin.java
@@ -17,7 +17,22 @@
package org.apache.camel.component.platform.http.plugin;
import java.io.IOException;
-
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.management.RuntimeMBeanException;
+
+import io.netty.buffer.ByteBufInputStream;
+import io.vertx.core.Handler;
+import io.vertx.core.MultiMap;
+import io.vertx.core.http.HttpHeaders;
+import io.vertx.core.http.HttpMethod;
+import io.vertx.core.http.HttpServerRequest;
+import io.vertx.core.impl.Arguments;
+import io.vertx.ext.web.RoutingContext;
+import io.vertx.ext.web.impl.Utils;
import org.apache.camel.CamelContext;
import org.apache.camel.spi.annotations.JdkService;
import org.apache.camel.support.service.ServiceSupport;
@@ -34,6 +49,8 @@ import org.jolokia.server.core.service.api.Restrictor;
import org.jolokia.server.core.util.NetworkUtil;
import org.jolokia.service.jmx.LocalRequestHandler;
import org.jolokia.service.serializer.JolokiaSerializer;
+import org.json.simple.JSONAware;
+import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,13 +59,11 @@ public class DefaultJolokiaPlatformHttpPlugin extends
ServiceSupport implements
private static final Logger LOG =
LoggerFactory.getLogger(DefaultJolokiaPlatformHttpPlugin.class);
+ private CamelContext camelContext;
private final JolokiaServiceManager serviceManager;
-
- private HttpRequestHandler requestHandler;
-
private final LogHandler jolokiaLogHandler;
-
- private CamelContext camelContext;
+ private HttpRequestHandler requestHandler;
+ private Handler<RoutingContext> handler;
public DefaultJolokiaPlatformHttpPlugin() {
var config = new StaticConfiguration(ConfigKey.AGENT_ID,
NetworkUtil.getAgentId(hashCode(), "vertx"));
@@ -69,6 +84,7 @@ public class DefaultJolokiaPlatformHttpPlugin extends
ServiceSupport implements
public void doStart() {
var jolokiaContext = serviceManager.start();
requestHandler = new HttpRequestHandler(jolokiaContext);
+ handler = createVertxHandler();
}
@Override
@@ -79,7 +95,11 @@ public class DefaultJolokiaPlatformHttpPlugin extends
ServiceSupport implements
}
@Override
- public HttpRequestHandler getRequestHandler() {
+ public Object getHandler() {
+ return handler;
+ }
+
+ public HttpRequestHandler getJolokiaRequestHandler() {
return requestHandler;
}
@@ -139,4 +159,58 @@ public class DefaultJolokiaPlatformHttpPlugin extends
ServiceSupport implements
}
}
+ private Handler<RoutingContext> createVertxHandler() {
+ return routingContext -> {
+ HttpServerRequest req = routingContext.request();
+ String remainingPath = Utils.pathOffset(req.path(),
routingContext);
+
+ JSONAware json = null;
+ try {
+ requestHandler.checkAccess(req.remoteAddress().host(),
req.remoteAddress().host(), getOriginOrReferer(req));
+ if (req.method() == HttpMethod.GET) {
+ json = requestHandler.handleGetRequest(req.uri(),
remainingPath, getParams(req.params()));
+ } else {
+ Arguments.require(routingContext.body() != null, "Missing
body");
+ InputStream inputStream = new
ByteBufInputStream(routingContext.body().buffer().getByteBuf());
+ json = requestHandler.handlePostRequest(req.uri(),
inputStream, StandardCharsets.UTF_8.name(),
+ getParams(req.params()));
+ }
+ } catch (Throwable exp) {
+ json = requestHandler.handleThrowable(
+ exp instanceof RuntimeMBeanException ?
((RuntimeMBeanException) exp).getTargetException() : exp);
+ } finally {
+ if (json == null)
+ json = requestHandler.handleThrowable(new
Exception("Internal error while handling an exception"));
+
+ routingContext.response()
+ .setStatusCode(getStatusCode(json))
+ .putHeader(HttpHeaders.CONTENT_TYPE,
"application/json")
+ .end(json.toJSONString());
+ }
+ };
+ }
+
+ private Map<String, String[]> getParams(MultiMap params) {
+ Map<String, String[]> response = new HashMap<>();
+ for (String name : params.names()) {
+ response.put(name, params.getAll(name).toArray(new String[0]));
+ }
+ return response;
+ }
+
+ private String getOriginOrReferer(HttpServerRequest req) {
+ String origin = req.getHeader(HttpHeaders.ORIGIN);
+ if (origin == null) {
+ origin = req.getHeader(HttpHeaders.REFERER);
+ }
+ return origin != null ? origin.replaceAll("[\\n\\r]*", "") : null;
+ }
+
+ private int getStatusCode(JSONAware json) {
+ if (json instanceof JSONObject && ((JSONObject) json).get("status")
instanceof Integer) {
+ return (Integer) ((JSONObject) json).get("status");
+ }
+ return 200;
+ }
+
}
diff --git
a/components/camel-platform-http-jolokia/src/test/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPluginTest.java
b/components/camel-platform-http-jolokia/src/test/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPluginTest.java
index 6b7f6caf9cc..730c1504e10 100644
---
a/components/camel-platform-http-jolokia/src/test/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPluginTest.java
+++
b/components/camel-platform-http-jolokia/src/test/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPluginTest.java
@@ -19,7 +19,6 @@ package org.apache.camel.component.platform.http.plugin;
import java.util.HashMap;
import java.util.Optional;
-import com.fasterxml.jackson.core.util.VersionUtil;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.component.platform.http.spi.PlatformHttpPluginRegistry;
import org.apache.camel.support.ResolverHelper;
@@ -41,7 +40,7 @@ public class DefaultJolokiaPlatformHttpPluginTest extends
ContextTestSupport {
DefaultJolokiaPlatformHttpPlugin plugin = registry
.resolvePluginById("jolokia",
DefaultJolokiaPlatformHttpPlugin.class).orElseThrow();
Assertions.assertNotNull(plugin);
- HttpRequestHandler handler = plugin.getRequestHandler();
+ HttpRequestHandler handler = plugin.getJolokiaRequestHandler();
JSONAware json = handler.handleGetRequest("", "/", new HashMap<>());
diff --git
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
index e573fb55254..18909f9a94c 100644
---
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
+++
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
@@ -18,10 +18,8 @@ package org.apache.camel.component.platform.http.main;
import java.io.File;
import java.io.FileOutputStream;
-import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -34,21 +32,13 @@ import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
-import javax.management.RuntimeMBeanException;
-
-import io.netty.buffer.ByteBufInputStream;
import io.vertx.core.Handler;
-import io.vertx.core.MultiMap;
-import io.vertx.core.http.HttpHeaders;
import io.vertx.core.http.HttpMethod;
-import io.vertx.core.http.HttpServerRequest;
-import io.vertx.core.impl.Arguments;
import io.vertx.ext.web.RequestBody;
import io.vertx.ext.web.Route;
import io.vertx.ext.web.RoutingContext;
import io.vertx.ext.web.handler.BodyHandler;
import io.vertx.ext.web.impl.BlockingHandlerDecorator;
-import io.vertx.ext.web.impl.Utils;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
@@ -80,9 +70,6 @@ import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
import org.apache.camel.util.json.JsonObject;
-import org.jolokia.server.core.http.HttpRequestHandler;
-import org.json.simple.JSONAware;
-import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -467,37 +454,7 @@ public class MainHttpServer extends ServiceSupport
implements CamelContextAware,
jolokia.method(HttpMethod.GET);
jolokia.method(HttpMethod.POST);
- Handler<RoutingContext> handler = routingContext -> {
- HttpRequestHandler requestHandler =
jolokiaPlugin.getRequestHandler();
-
- HttpServerRequest req = routingContext.request();
- String remainingPath = Utils.pathOffset(req.path(),
routingContext);
-
- JSONAware json = null;
- try {
- requestHandler.checkAccess(req.remoteAddress().host(),
req.remoteAddress().host(), getOriginOrReferer(req));
- if (req.method() == HttpMethod.GET) {
- json = requestHandler.handleGetRequest(req.uri(),
remainingPath, getParams(req.params()));
- } else {
- Arguments.require(routingContext.body() != null, "Missing
body");
- InputStream inputStream = new
ByteBufInputStream(routingContext.body().buffer().getByteBuf());
- json = requestHandler.handlePostRequest(req.uri(),
inputStream, StandardCharsets.UTF_8.name(),
- getParams(req.params()));
- }
- } catch (Throwable exp) {
- json = requestHandler.handleThrowable(
- exp instanceof RuntimeMBeanException ?
((RuntimeMBeanException) exp).getTargetException() : exp);
- } finally {
- if (json == null)
- json = requestHandler.handleThrowable(new
Exception("Internal error while handling an exception"));
-
- routingContext.response()
- .setStatusCode(getStatusCode(json))
- .putHeader(HttpHeaders.CONTENT_TYPE,
"application/json")
- .end(json.toJSONString());
- }
- };
-
+ Handler<RoutingContext> handler = (Handler<RoutingContext>)
jolokiaPlugin.getHandler();
jolokia.handler(new BlockingHandlerDecorator(handler, true));
platformHttpComponent.addHttpEndpoint("/q/jolokia", null, null);
@@ -512,29 +469,6 @@ public class MainHttpServer extends ServiceSupport
implements CamelContextAware,
"Cannot create PlatformHttpPluginRegistry. Make sure
camel-platform-http JAR is on classpath."));
}
- private Map<String, String[]> getParams(MultiMap params) {
- Map<String, String[]> response = new HashMap<>();
- for (String name : params.names()) {
- response.put(name, params.getAll(name).toArray(new String[0]));
- }
- return response;
- }
-
- private String getOriginOrReferer(HttpServerRequest req) {
- String origin = req.getHeader(HttpHeaders.ORIGIN);
- if (origin == null) {
- origin = req.getHeader(HttpHeaders.REFERER);
- }
- return origin != null ? origin.replaceAll("[\\n\\r]*", "") : null;
- }
-
- protected int getStatusCode(JSONAware json) {
- if (json instanceof JSONObject && ((JSONObject) json).get("status")
instanceof Integer) {
- return (Integer) ((JSONObject) json).get("status");
- }
- return 200;
- }
-
@Override
protected void doStop() throws Exception {
ServiceHelper.stopAndShutdownService(server);
diff --git a/components/camel-platform-http/pom.xml
b/components/camel-platform-http/pom.xml
index 5d567f0d69b..b1b5f3961f3 100644
--- a/components/camel-platform-http/pom.xml
+++ b/components/camel-platform-http/pom.xml
@@ -42,13 +42,6 @@
<artifactId>camel-util-json</artifactId>
</dependency>
- <!-- jolokia -->
- <dependency>
- <groupId>org.jolokia</groupId>
- <artifactId>jolokia-agent-jvm</artifactId>
- <version>${jolokia-version}</version>
- </dependency>
-
<!-- test infra -->
<dependency>
<groupId>org.apache.camel</groupId>
diff --git
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/plugin/JolokiaPlatformHttpPlugin.java
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/plugin/JolokiaPlatformHttpPlugin.java
index 04393c1491d..6adc9cdd4d4 100644
---
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/plugin/JolokiaPlatformHttpPlugin.java
+++
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/plugin/JolokiaPlatformHttpPlugin.java
@@ -17,7 +17,6 @@
package org.apache.camel.component.platform.http.plugin;
import org.apache.camel.component.platform.http.spi.PlatformHttpPlugin;
-import org.jolokia.server.core.http.HttpRequestHandler;
/**
* Plugin for Jolokia
@@ -26,5 +25,8 @@ public interface JolokiaPlatformHttpPlugin extends
PlatformHttpPlugin {
String NAME = "jolokia";
- HttpRequestHandler getRequestHandler();
+ /**
+ * The VertX Handler (io.vertx.core.Handler) that handles the HTTP
requests to service Jolokia
+ */
+ Object getHandler();
}