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 9b4a553 CAMEL-17359: camel-debug - JAR to make camel debugging easier
from tooling
9b4a553 is described below
commit 9b4a5531b2d5577f03d4c440ee57377e9e6aebf2
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Dec 20 19:55:03 2021 +0100
CAMEL-17359: camel-debug - JAR to make camel debugging easier from tooling
---
bom/camel-bom/pom.xml | 5 ++
.../org/apache/camel/catalog/components/log.json | 1 +
.../org/apache/camel/catalog/others.properties | 1 +
.../org/apache/camel/catalog/others/debug.json | 15 ++++++
components/camel-debug/pom.xml | 53 ++++++++++++++++++++++
.../services/org/apache/camel/debugger-factory | 2 +
.../services/org/apache/camel/other.properties | 7 +++
.../camel-debug/src/generated/resources/debug.json | 15 ++++++
components/camel-debug/src/main/docs/debug.adoc | 22 +++++++++
.../camel/impl/debugger/CamelDebuggerFactory.java | 31 +++++++++++++
components/pom.xml | 1 +
core/camel-allcomponents/pom.xml | 4 ++
.../main/java/org/apache/camel/spi/Debugger.java | 2 +
.../camel/impl/engine/AbstractCamelContext.java | 5 ++
.../camel/main/DefaultConfigurationConfigurer.java | 6 ++-
.../modules/others/examples/json/debug.json | 1 +
docs/components/modules/others/nav.adoc | 1 +
docs/components/modules/others/pages/debug.adoc | 1 +
parent/pom.xml | 5 ++
19 files changed, 177 insertions(+), 1 deletion(-)
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 3e3c244..e1ed075 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -619,6 +619,11 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
+ <artifactId>camel-debug</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
<artifactId>camel-digitalocean</artifactId>
<version>${project.version}</version>
</dependency>
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/log.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/log.json
index 369a970..5e40356 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/log.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/log.json
@@ -36,6 +36,7 @@
"level": { "kind": "parameter", "displayName": "Level", "group":
"producer", "label": "", "required": false, "type": "string", "javaType":
"java.lang.String", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF"
], "deprecated": false, "autowired": false, "secret": false, "defaultValue":
"INFO", "description": "Logging level to use. The default value is INFO." },
"logMask": { "kind": "parameter", "displayName": "Log Mask", "group":
"producer", "label": "", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"description": "If true, mask sensitive information like password or passphrase
in the log." },
"marker": { "kind": "parameter", "displayName": "Marker", "group":
"producer", "label": "", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"description": "An optional Marker name to use." },
+ "plain": { "kind": "parameter", "displayName": "Plain", "group":
"producer", "label": "", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled only the body will be printed
out" },
"exchangeFormatter": { "kind": "parameter", "displayName": "Exchange
Formatter", "group": "advanced", "label": "advanced", "required": false,
"type": "object", "javaType": "org.apache.camel.spi.ExchangeFormatter",
"deprecated": false, "autowired": false, "secret": false, "description": "To
use a custom exchange formatter" },
"maxChars": { "kind": "parameter", "displayName": "Max Chars", "group":
"formatting", "label": "formatting", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 10000, "description": "Limits the number of characters logged
per line." },
"multiline": { "kind": "parameter", "displayName": "Multiline", "group":
"formatting", "label": "formatting", "required": false, "type": "boolean",
"javaType": "boolean", "deprecated": false, "autowired": false, "secret":
false, "defaultValue": false, "description": "If enabled then each information
is outputted on a newline." },
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
index 128d3a1..c2aa9fd 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties
@@ -4,6 +4,7 @@ caffeine-lrucache
cdi
csimple-joor
cxf-transport
+debug
elytron
etcd3
headersmap
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/debug.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/debug.json
new file mode 100644
index 0000000..3556651
--- /dev/null
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/debug.json
@@ -0,0 +1,15 @@
+{
+ "other": {
+ "kind": "other",
+ "name": "debug",
+ "title": "Debug",
+ "description": "Enables Camel Route Debugging",
+ "deprecated": false,
+ "firstVersion": "3.15.0",
+ "label": "core",
+ "supportLevel": "Preview",
+ "groupId": "org.apache.camel",
+ "artifactId": "camel-debug",
+ "version": "3.15.0-SNAPSHOT"
+ }
+}
diff --git a/components/camel-debug/pom.xml b/components/camel-debug/pom.xml
new file mode 100644
index 0000000..53f2166
--- /dev/null
+++ b/components/camel-debug/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>components</artifactId>
+ <version>3.15.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>camel-debug</artifactId>
+ <packaging>jar</packaging>
+ <name>Camel :: Debugging</name>
+ <description>Enables Camel Route Debugging</description>
+
+ <properties>
+ <firstVersion>3.15.0</firstVersion>
+ <label>core</label>
+ </properties>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-support</artifactId>
+ </dependency>
+ <!-- JMX is needed for Camel Debugger -->
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-management</artifactId>
+ </dependency>
+
+ </dependencies>
+
+</project>
diff --git
a/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/debugger-factory
b/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/debugger-factory
new file mode 100644
index 0000000..ef4911a
--- /dev/null
+++
b/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/debugger-factory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.impl.debugger.CamelDebuggerFactory
diff --git
a/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/other.properties
b/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/other.properties
new file mode 100644
index 0000000..a006824
--- /dev/null
+++
b/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+name=debug
+groupId=org.apache.camel
+artifactId=camel-debug
+version=3.15.0-SNAPSHOT
+projectName=Camel :: Debugging
+projectDescription=Enables Camel Route Debugging
diff --git a/components/camel-debug/src/generated/resources/debug.json
b/components/camel-debug/src/generated/resources/debug.json
new file mode 100644
index 0000000..3556651
--- /dev/null
+++ b/components/camel-debug/src/generated/resources/debug.json
@@ -0,0 +1,15 @@
+{
+ "other": {
+ "kind": "other",
+ "name": "debug",
+ "title": "Debug",
+ "description": "Enables Camel Route Debugging",
+ "deprecated": false,
+ "firstVersion": "3.15.0",
+ "label": "core",
+ "supportLevel": "Preview",
+ "groupId": "org.apache.camel",
+ "artifactId": "camel-debug",
+ "version": "3.15.0-SNAPSHOT"
+ }
+}
diff --git a/components/camel-debug/src/main/docs/debug.adoc
b/components/camel-debug/src/main/docs/debug.adoc
new file mode 100644
index 0000000..1bc140e
--- /dev/null
+++ b/components/camel-debug/src/main/docs/debug.adoc
@@ -0,0 +1,22 @@
+= Debug Component
+:doctitle: Debug
+:shortname: debug
+:artifactid: camel-debug
+:description: Enables Camel Route Debugging
+:since: 3.15
+:supportlevel: Preview
+
+*Since Camel {since}*
+
+The camel-debug enables Camel debugger for 3rd party tooling.
+This makes it easier to perform debugging in IDEs such as IDEA, Eclipse, VSCode
+
+== Auto-detection from classpath
+
+To use this implementation all you need to do is to add the `camel-debug`
dependency to the classpath,
+and Camel should auto-detect this on startup and log as follows:
+
+[source,text]
+----
+Detected and enabling Camel Debugging
+----
diff --git
a/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java
b/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java
new file mode 100644
index 0000000..b2842b8
--- /dev/null
+++
b/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl.debugger;
+
+import org.apache.camel.spi.Debugger;
+import org.apache.camel.spi.annotations.JdkService;
+
+@JdkService(Debugger.FACTORY)
+public class CamelDebuggerFactory {
+
+ // noop - just detect on classpath and automatic enable debugger
+
+ @Override
+ public String toString() {
+ return "camel-debug";
+ }
+}
diff --git a/components/pom.xml b/components/pom.xml
index 5d784cb..152d944 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -128,6 +128,7 @@
<module>camel-csimple-joor</module>
<module>camel-csv</module>
<module>camel-datasonnet</module>
+ <module>camel-debug</module>
<module>camel-debezium</module>
<module>camel-digitalocean</module>
<module>camel-disruptor</module>
diff --git a/core/camel-allcomponents/pom.xml b/core/camel-allcomponents/pom.xml
index 2c2054f..35136bb 100644
--- a/core/camel-allcomponents/pom.xml
+++ b/core/camel-allcomponents/pom.xml
@@ -391,6 +391,10 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
+ <artifactId>camel-debug</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
<artifactId>camel-digitalocean</artifactId>
</dependency>
<dependency>
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Debugger.java
b/core/camel-api/src/main/java/org/apache/camel/spi/Debugger.java
index c37f4ea..a365835 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/Debugger.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/Debugger.java
@@ -30,6 +30,8 @@ import org.apache.camel.spi.CamelEvent.ExchangeEvent;
*/
public interface Debugger extends Service, CamelContextAware {
+ String FACTORY = "debugger-factory";
+
/**
* Add the given breakpoint
*
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 3ebc21f..c114393 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -4117,6 +4117,11 @@ public abstract class AbstractCamelContext extends
BaseService
factory = (ManagementStrategyFactory) object;
}
}
+ // detect if camel debugger should be enabled if on classpath
+ if
(getBootstrapFactoryFinder().findClass(Debugger.FACTORY).isPresent()) {
+ LOG.info("Detected and enabling Camel Debugging");
+ setDebugging(true);
+ }
} catch (Exception e) {
LOG.warn("Cannot create JmxManagementStrategyFactory. Will
fallback and disable JMX.", e);
}
diff --git
a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index 88645af..43b7952 100644
---
a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++
b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -259,7 +259,11 @@ public final class DefaultConfigurationConfigurer {
camelContext.getGlobalEndpointConfiguration().setBridgeErrorHandler(config.isEndpointBridgeErrorHandler());
camelContext.getGlobalEndpointConfiguration().setLazyStartProducer(config.isEndpointLazyStartProducer());
- camelContext.setDebugging(config.isDebugging());
+ if (config.isDebugging()) {
+ // debug may be enabled via camel-debug JAR on classpath so if
config is false (default)
+ // then do not change setting on camel-context
+ camelContext.setDebugging(true);
+ }
camelContext.setBacklogTracing(config.isBacklogTracing());
camelContext.setTracing(config.isTracing());
camelContext.setTracingStandby(config.isTracingStandby());
diff --git a/docs/components/modules/others/examples/json/debug.json
b/docs/components/modules/others/examples/json/debug.json
new file mode 120000
index 0000000..08b3453
--- /dev/null
+++ b/docs/components/modules/others/examples/json/debug.json
@@ -0,0 +1 @@
+../../../../../../components/camel-debug/src/generated/resources/debug.json
\ No newline at end of file
diff --git a/docs/components/modules/others/nav.adoc
b/docs/components/modules/others/nav.adoc
index 9a2a00d..d4c3848 100644
--- a/docs/components/modules/others/nav.adoc
+++ b/docs/components/modules/others/nav.adoc
@@ -8,6 +8,7 @@
** xref:cdi.adoc[CDI]
** xref:csimple-joor.adoc[CSimple jOOR]
** xref:cxf-transport.adoc[CXF Transport]
+** xref:debug.adoc[Debug]
** xref:dsl.adoc[DSL]
*** xref:groovy-dsl.adoc[Groovy Dsl]
*** xref:java-joor-dsl.adoc[Java Joor Dsl]
diff --git a/docs/components/modules/others/pages/debug.adoc
b/docs/components/modules/others/pages/debug.adoc
new file mode 120000
index 0000000..7643d6b
--- /dev/null
+++ b/docs/components/modules/others/pages/debug.adoc
@@ -0,0 +1 @@
+../../../../../components/camel-debug/src/main/docs/debug.adoc
\ No newline at end of file
diff --git a/parent/pom.xml b/parent/pom.xml
index 30e78a4..69238a4 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -1259,6 +1259,11 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
+ <artifactId>camel-debug</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
<artifactId>camel-digitalocean</artifactId>
<version>${project.version}</version>
</dependency>