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 8fd9267e359 camel trace to show type of exchange and message class so 
users better understand the structure of envelope in Camel.
8fd9267e359 is described below

commit 8fd9267e3599a4ec8b4512c2b5b24ae420816403
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Feb 18 22:38:33 2023 +0100

    camel trace to show type of exchange and message class so users better 
understand the structure of envelope in Camel.
---
 .../org/apache/camel/util/MessageHelperTest.java   |  4 +-
 .../camel/management/BacklogTracerFilterTest.java  |  6 +-
 .../management/BacklogTracerIdOnAllNodesTest.java  |  4 +-
 .../camel/management/BacklogTracerPatternTest.java |  4 +-
 .../management/BacklogTracerStreamCachingTest.java |  2 +-
 .../apache/camel/management/BacklogTracerTest.java | 16 ++---
 .../ManagedBrowsableEndpointAsXmlTest.java         | 34 ++++-----
 .../org/apache/camel/support/MessageHelper.java    | 15 ++--
 .../core/commands/action/CamelTraceAction.java     | 84 +++++++++++++++-------
 9 files changed, 104 insertions(+), 65 deletions(-)

diff --git 
a/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java 
b/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java
index d78db90ec35..ab9947c9220 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java
@@ -202,7 +202,7 @@ public class MessageHelperTest {
         String out = MessageHelper.dumpAsXml(message, false);
 
         assertEquals("<message exchangeId=\"" + 
message.getExchange().getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">"
                      + "\n  <headers>\n    <header key=\"foo\" 
type=\"java.lang.Integer\">123</header>\n  </headers>\n</message>",
                 out);
 
@@ -223,7 +223,7 @@ public class MessageHelperTest {
         String out = MessageHelper.dumpAsXml(message, false, 2);
 
         assertEquals("  <message exchangeId=\"" + 
message.getExchange().getExchangeId()
-                     + "\" exchangePattern=\"InOut\" 
type=\"org.apache.camel.support.DefaultMessage\">"
+                     + "\" exchangePattern=\"InOut\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">"
                      + "\n    <headers>\n      <header key=\"foo\" 
type=\"java.lang.Integer\">123</header>\n    </headers>\n  </message>",
                 out);
 
diff --git 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerFilterTest.java
 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerFilterTest.java
index 6a26f4bdd6f..120ccf41829 100644
--- 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerFilterTest.java
+++ 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerFilterTest.java
@@ -75,7 +75,7 @@ public class BacklogTracerFilterTest extends 
ManagementTestSupport {
         BacklogTracerEventMessage event = events.get(0);
         assertEquals(null, event.getToNode());
         assertEquals("    <message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <headers>\n"
                      + "        <header key=\"foo\" 
type=\"java.lang.Integer\">123</header>\n"
                      + "      </headers>\n"
@@ -86,7 +86,7 @@ public class BacklogTracerFilterTest extends 
ManagementTestSupport {
         BacklogTracerEventMessage event1 = events.get(1);
         assertEquals("foo", event1.getToNode());
         assertEquals("    <message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <headers>\n"
                      + "        <header key=\"foo\" 
type=\"java.lang.Integer\">123</header>\n"
                      + "      </headers>\n"
@@ -97,7 +97,7 @@ public class BacklogTracerFilterTest extends 
ManagementTestSupport {
         BacklogTracerEventMessage event2 = events.get(2);
         assertEquals("bar", event2.getToNode());
         assertEquals("    <message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <headers>\n"
                      + "        <header key=\"foo\" 
type=\"java.lang.Integer\">123</header>\n"
                      + "      </headers>\n"
diff --git 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java
 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java
index c3915532c94..45886323e3f 100644
--- 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java
+++ 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java
@@ -113,7 +113,7 @@ public class BacklogTracerIdOnAllNodesTest extends 
ManagementTestSupport {
         BacklogTracerEventMessage event1 = events.get(0);
         assertEquals(to2.getId(), event1.getToNode());
         assertEquals("    <message exchangeId=\"" + 
fooExchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Hello 
World</body>\n"
                      + "    </message>",
                 event1.getMessageAsXml());
@@ -127,7 +127,7 @@ public class BacklogTracerIdOnAllNodesTest extends 
ManagementTestSupport {
         event1 = events.get(0);
         assertEquals("camel", event1.getToNode());
         assertEquals("    <message exchangeId=\"" + 
camelExchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Hello 
Camel</body>\n"
                      + "    </message>",
                 event1.getMessageAsXml());
diff --git 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java
 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java
index 2317cd8bfd5..988bb4f6425 100644
--- 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java
+++ 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java
@@ -75,7 +75,7 @@ public class BacklogTracerPatternTest extends 
ManagementTestSupport {
         BacklogTracerEventMessage event1 = events.get(0);
         assertEquals("foo", event1.getToNode());
         assertEquals("    <message exchangeId=\"" + 
exchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Hello 
World</body>\n"
                      + "    </message>",
                 event1.getMessageAsXml());
@@ -83,7 +83,7 @@ public class BacklogTracerPatternTest extends 
ManagementTestSupport {
         BacklogTracerEventMessage event2 = events.get(1);
         assertEquals("foo", event2.getToNode());
         assertEquals("    <message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Bye 
World</body>\n"
                      + "    </message>",
                 event2.getMessageAsXml());
diff --git 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerStreamCachingTest.java
 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerStreamCachingTest.java
index 054d9fd25ad..6363a186eca 100644
--- 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerStreamCachingTest.java
+++ 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerStreamCachingTest.java
@@ -78,7 +78,7 @@ public class BacklogTracerStreamCachingTest extends 
ManagementTestSupport {
         BacklogTracerEventMessage event1 = events.get(0);
         assertEquals("bar", event1.getToNode());
         assertEquals("    <message exchangeId=\"" + 
exchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body 
type=\"org.apache.camel.converter.stream.ByteArrayInputStreamCache\">Bye 
World</body>\n"
                      + "    </message>",
                 event1.getMessageAsXml());
diff --git 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerTest.java
 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerTest.java
index e66d3be2d59..130aa997704 100644
--- 
a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerTest.java
+++ 
b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerTest.java
@@ -76,7 +76,7 @@ public class BacklogTracerTest extends ManagementTestSupport {
         BacklogTracerEventMessage event1 = events.get(0);
         assertEquals("foo", event1.getToNode());
         assertEquals("    <message exchangeId=\"" + 
exchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Hello 
World</body>\n"
                      + "    </message>",
                 event1.getMessageAsXml());
@@ -84,7 +84,7 @@ public class BacklogTracerTest extends ManagementTestSupport {
         BacklogTracerEventMessage event2 = events.get(1);
         assertEquals("foo", event2.getToNode());
         assertEquals("    <message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Bye 
World</body>\n"
                      + "    </message>",
                 event2.getMessageAsXml());
@@ -163,7 +163,7 @@ public class BacklogTracerTest extends 
ManagementTestSupport {
         assertEquals("route1", event0.getRouteId());
         assertEquals(null, event0.getToNode());
         assertEquals("    <message exchangeId=\"" + 
fooExchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Hello 
World</body>\n"
                      + "    </message>",
                 event0.getMessageAsXml());
@@ -172,7 +172,7 @@ public class BacklogTracerTest extends 
ManagementTestSupport {
         assertEquals("route1", event1.getRouteId());
         assertEquals("foo", event1.getToNode());
         assertEquals("    <message exchangeId=\"" + 
fooExchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Hello 
World</body>\n"
                      + "    </message>",
                 event1.getMessageAsXml());
@@ -181,7 +181,7 @@ public class BacklogTracerTest extends 
ManagementTestSupport {
         assertEquals("route1", event2.getRouteId());
         assertEquals("bar", event2.getToNode());
         assertEquals("    <message exchangeId=\"" + 
barExchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Hello 
World</body>\n"
                      + "    </message>",
                 event2.getMessageAsXml());
@@ -190,7 +190,7 @@ public class BacklogTracerTest extends 
ManagementTestSupport {
         assertEquals("route1", event3.getRouteId());
         assertEquals(null, event3.getToNode());
         assertEquals("    <message exchangeId=\"" + 
fooExchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Bye 
World</body>\n"
                      + "    </message>",
                 event3.getMessageAsXml());
@@ -199,7 +199,7 @@ public class BacklogTracerTest extends 
ManagementTestSupport {
         assertEquals("route1", event4.getRouteId());
         assertEquals("foo", event4.getToNode());
         assertEquals("    <message exchangeId=\"" + 
fooExchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Bye 
World</body>\n"
                      + "    </message>",
                 event3.getMessageAsXml());
@@ -208,7 +208,7 @@ public class BacklogTracerTest extends 
ManagementTestSupport {
         assertEquals("route1", event5.getRouteId());
         assertEquals("bar", event5.getToNode());
         assertEquals("    <message exchangeId=\"" + 
barExchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n"
                      + "      <body type=\"java.lang.String\">Bye 
World</body>\n"
                      + "    </message>",
                 event4.getMessageAsXml());
diff --git 
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedBrowsableEndpointAsXmlTest.java
 
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedBrowsableEndpointAsXmlTest.java
index 16cb16293b6..31965c44787 100644
--- 
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedBrowsableEndpointAsXmlTest.java
+++ 
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedBrowsableEndpointAsXmlTest.java
@@ -67,7 +67,7 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         log.info(out);
 
         assertEquals("<message exchangeId=\"" + 
exchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <body type=\"java.lang.String\">&lt;foo&gt;Camel 
&amp;gt; Donkey&lt;/foo&gt;</body>\n</message>",
                 out);
 
@@ -76,7 +76,7 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         assertNotNull(out);
         log.info(out);
         assertEquals("<message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <body type=\"java.lang.String\">Camel &gt; 
Donkey</body>\n</message>",
                 out);
 
@@ -85,7 +85,7 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         assertNotNull(out);
         log.info(out);
         assertEquals("<message exchangeId=\"" + 
exchanges.get(2).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"name\" 
type=\"java.lang.String\">Me &amp; You</header>\n  </headers>\n"
                      + "  <body type=\"java.lang.String\">&lt;foo&gt;Camel 
&amp;gt; Donkey&lt;/foo&gt;</body>\n</message>",
                 out);
@@ -96,7 +96,7 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         log.info(out);
         assertEquals(
                 "<message exchangeId=\"" + exchanges.get(3).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n  <headers>\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n  <headers>\n"
                      + "    <header key=\"title\" 
type=\"java.lang.String\">&lt;title&gt;Me &amp;amp; 
You&lt;/title&gt;</header>\n  </headers>\n"
                      + "  <body type=\"java.lang.String\">&lt;foo&gt;Camel 
&amp;gt; Donkey&lt;/foo&gt;</body>\n</message>",
                 out);
@@ -106,7 +106,7 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         assertNotNull(out);
         log.info(out);
         assertEquals("<message exchangeId=\"" + 
exchanges.get(4).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"name\" 
type=\"java.lang.String\">Me &amp; You</header>\n  </headers>\n"
                      + "  <body type=\"java.lang.String\">Camel &gt; 
Donkey</body>\n</message>",
                 out);
@@ -116,7 +116,7 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         assertNotNull(out);
         log.info(out);
         assertEquals("<message exchangeId=\"" + 
exchanges.get(5).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"user\" 
type=\"java.lang.Boolean\">true</header>\n  </headers>\n"
                      + "  <body 
type=\"java.lang.Integer\">123</body>\n</message>",
                 out);
@@ -126,7 +126,7 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         assertNotNull(out);
         log.info(out);
         assertEquals("<message exchangeId=\"" + 
exchanges.get(6).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"title\" 
type=\"java.lang.String\">Camel rocks</header>\n"
                      + "    <header key=\"uid\" 
type=\"java.lang.Integer\">123</header>\n"
                      + "    <header key=\"user\" 
type=\"java.lang.Boolean\">false</header>\n  </headers>\n"
@@ -155,7 +155,7 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         log.info(out);
 
         assertEquals("<message exchangeId=\"" + 
exchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"foo\" 
type=\"java.lang.Integer\">123</header>\n  </headers>\n</message>",
                 out);
 
@@ -164,7 +164,7 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         assertNotNull(out);
         log.info(out);
         assertEquals("<message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"foo\" 
type=\"java.lang.Integer\">456</header>\n  </headers>\n</message>",
                 out);
     }
@@ -190,10 +190,10 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         log.info(out);
 
         assertEquals("<messages>\n<message exchangeId=\"" + 
exchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <body type=\"java.lang.String\">Hello 
World</body>\n</message>\n"
                      + "<message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"foo\" 
type=\"java.lang.Integer\">456</header>\n  </headers>\n"
                      + "  <body type=\"java.lang.String\">Bye 
World</body>\n</message>\n</messages>",
                 out);
@@ -220,10 +220,10 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         log.info(out);
 
         assertEquals("<messages>\n<message exchangeId=\"" + 
exchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\">\n  <headers>\n"
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\">\n  <headers>\n"
                      + "    <header key=\"foo\" 
type=\"java.lang.Integer\">123</header>\n  </headers>\n</message>\n"
                      + "<message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"foo\" 
type=\"java.lang.Integer\">456</header>\n  </headers>\n"
                      + "</message>\n</messages>",
                 out);
@@ -251,10 +251,10 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         log.info(out);
 
         assertEquals("<messages>\n<message exchangeId=\"" + 
exchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <body type=\"java.lang.String\">Hello 
World</body>\n</message>\n"
                      + "<message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"foo\" 
type=\"java.lang.Integer\">456</header>\n  </headers>\n"
                      + "  <body type=\"java.lang.String\">Bye 
World</body>\n</message>\n</messages>",
                 out);
@@ -282,10 +282,10 @@ public class ManagedBrowsableEndpointAsXmlTest extends 
ManagementTestSupport {
         log.info(out);
 
         assertEquals("<messages>\n<message exchangeId=\"" + 
exchanges.get(0).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"foo\" 
type=\"java.lang.Integer\">123</header>\n  </headers>\n</message>\n"
                      + "<message exchangeId=\"" + 
exchanges.get(1).getExchangeId()
-                     + "\" exchangePattern=\"InOnly\" 
type=\"org.apache.camel.support.DefaultMessage\""
+                     + "\" exchangePattern=\"InOnly\" 
exchangeType=\"org.apache.camel.support.DefaultExchange\" 
messageType=\"org.apache.camel.support.DefaultMessage\""
                      + ">\n  <headers>\n    <header key=\"foo\" 
type=\"java.lang.Integer\">456</header>\n  </headers>\n"
                      + "</message>\n</messages>",
                 out);
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java 
b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
index da71ef2e4c3..564105481bb 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
@@ -501,10 +501,12 @@ public final class MessageHelper {
 
         // include exchangeId/exchangePattern/type as attribute on the 
<message> tag
         sb.append(prefix);
-        String type = ObjectHelper.classCanonicalName(message);
+        String messageType = ObjectHelper.classCanonicalName(message);
+        String exchangeType = 
ObjectHelper.classCanonicalName(message.getExchange());
         sb.append("<message 
exchangeId=\"").append(message.getExchange().getExchangeId())
                 .append("\" 
exchangePattern=\"").append(message.getExchange().getPattern().name())
-                .append("\" type=\"").append(type).append("\">\n");
+                .append("\" exchangeType=\"").append(exchangeType)
+                .append("\" 
messageType=\"").append(messageType).append("\">\n");
 
         // exchange properties
         if (includeExchangeProperties && 
message.getExchange().hasProperties()) {
@@ -514,7 +516,7 @@ public final class MessageHelper {
             Map<String, Object> properties = new 
TreeMap<>(message.getExchange().getProperties());
             for (Map.Entry<String, Object> entry : properties.entrySet()) {
                 Object value = entry.getValue();
-                type = ObjectHelper.classCanonicalName(value);
+                String type = ObjectHelper.classCanonicalName(value);
                 sb.append(prefix);
                 sb.append("    <exchangeProperty 
key=\"").append(entry.getKey()).append("\"");
                 if (type != null) {
@@ -550,7 +552,7 @@ public final class MessageHelper {
             Map<String, Object> headers = new TreeMap<>(message.getHeaders());
             for (Map.Entry<String, Object> entry : headers.entrySet()) {
                 Object value = entry.getValue();
-                type = ObjectHelper.classCanonicalName(value);
+                String type = ObjectHelper.classCanonicalName(value);
                 sb.append(prefix);
                 sb.append("    <header 
key=\"").append(entry.getKey()).append("\"");
                 if (type != null) {
@@ -581,7 +583,7 @@ public final class MessageHelper {
         if (includeBody) {
             sb.append(prefix);
             sb.append("  <body");
-            type = ObjectHelper.classCanonicalName(message.getBody());
+            String type = ObjectHelper.classCanonicalName(message.getBody());
             if (type != null) {
                 sb.append(" type=\"").append(type).append("\"");
             }
@@ -870,7 +872,8 @@ public final class MessageHelper {
         root.put("message", jo);
         jo.put("exchangeId", message.getExchange().getExchangeId());
         jo.put("exchangePattern", message.getExchange().getPattern().name());
-        jo.put("type", ObjectHelper.classCanonicalName(message));
+        jo.put("exchangeType", 
ObjectHelper.classCanonicalName(message.getExchange()));
+        jo.put("messageType", ObjectHelper.classCanonicalName(message));
 
         // exchange properties
         if (includeExchangeProperties && 
message.getExchange().hasProperties()) {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
index b66bc478611..9d583d47798 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
@@ -688,6 +688,12 @@ public class CamelTraceAction extends ActionBaseCommand {
     private String getDataAsTable(Row r) {
         List<TableRow> rows = new ArrayList<>();
 
+        TableRow eRow = new TableRow("Exchange", 
r.message.getString("exchangeType"), null, null);
+        String tab1 = AsciiTable.getTable(AsciiTable.NO_BORDERS, 
List.of(eRow), Arrays.asList(
+                new Column().dataAlign(HorizontalAlign.LEFT)
+                        .minWidth(showExchangeProperties ? 11 : 
9).with(TableRow::kindAsString),
+                new 
Column().dataAlign(HorizontalAlign.LEFT).with(TableRow::typeAndLengthAsString)));
+        // exchange properties
         JsonArray arr = r.message.getCollection("exchangeProperties");
         if (arr != null) {
             for (Object o : arr) {
@@ -695,6 +701,23 @@ public class CamelTraceAction extends ActionBaseCommand {
                 rows.add(new TableRow("Property", jo.getString("type"), 
jo.getString("key"), jo.get("value")));
             }
         }
+        String tab2 = AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
+                new Column().dataAlign(HorizontalAlign.LEFT)
+                        .minWidth(showExchangeProperties ? 12 : 
10).with(TableRow::kindAsString),
+                new Column().dataAlign(HorizontalAlign.LEFT)
+                        .maxWidth(40, 
OverflowBehaviour.ELLIPSIS_LEFT).with(TableRow::typeAsString),
+                new Column().dataAlign(HorizontalAlign.RIGHT)
+                        .maxWidth(40, 
OverflowBehaviour.NEWLINE).with(TableRow::keyAsString),
+                new Column().dataAlign(HorizontalAlign.LEFT)
+                        .maxWidth(80, 
OverflowBehaviour.NEWLINE).with(TableRow::valueAsString)));
+        rows.clear();
+
+        // message type before headers
+        TableRow msgRow = new TableRow("Message", 
r.message.getString("messageType"), null, null);
+        String tab3 = AsciiTable.getTable(AsciiTable.NO_BORDERS, 
List.of(msgRow), Arrays.asList(
+                new Column().dataAlign(HorizontalAlign.LEFT)
+                        .minWidth(showExchangeProperties ? 12 : 
10).with(TableRow::kindAsString),
+                new 
Column().dataAlign(HorizontalAlign.LEFT).with(TableRow::typeAndLengthAsString)));
         arr = r.message.getCollection("headers");
         if (arr != null) {
             for (Object o : arr) {
@@ -702,10 +725,10 @@ public class CamelTraceAction extends ActionBaseCommand {
                 rows.add(new TableRow("Header", jo.getString("type"), 
jo.getString("key"), jo.get("value")));
             }
         }
-        // properties and headers
-        String tab1 = AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
+        // headers
+        String tab4 = AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                 new Column().dataAlign(HorizontalAlign.LEFT)
-                        .minWidth(showExchangeProperties ? 11 : 
9).with(TableRow::kindAsString),
+                        .minWidth(showExchangeProperties ? 12 : 
10).with(TableRow::kindAsString),
                 new Column().dataAlign(HorizontalAlign.LEFT)
                         .maxWidth(40, 
OverflowBehaviour.ELLIPSIS_LEFT).with(TableRow::typeAsString),
                 new Column().dataAlign(HorizontalAlign.RIGHT)
@@ -714,50 +737,63 @@ public class CamelTraceAction extends ActionBaseCommand {
                         .maxWidth(80, 
OverflowBehaviour.NEWLINE).with(TableRow::valueAsString)));
 
         // body and type
-        JsonObject jo = r.message;
-        TableRow msgRow = new TableRow("Message", jo.getString("type"), null, 
null);
-        jo = r.message.getMap("body");
+        JsonObject jo = r.message.getMap("body");
         TableRow bodyRow = new TableRow("Body", jo.getString("type"), null, 
jo.get("value"));
-        String tab2 = AsciiTable.getTable(AsciiTable.NO_BORDERS, 
List.of(msgRow, bodyRow), Arrays.asList(
+        String tab5 = AsciiTable.getTable(AsciiTable.NO_BORDERS, 
List.of(bodyRow), Arrays.asList(
                 new Column().dataAlign(HorizontalAlign.LEFT)
-                        .minWidth(showExchangeProperties ? 11 : 
9).with(TableRow::kindAsString),
+                        .minWidth(showExchangeProperties ? 12 : 
10).with(TableRow::kindAsString),
                 new 
Column().dataAlign(HorizontalAlign.LEFT).with(TableRow::typeAndLengthAsString)));
         // body value only (span)
-        String tab3 = null;
+        String tab6 = null;
         if (bodyRow.value != null) {
-            tab3 = AsciiTable.getTable(AsciiTable.NO_BORDERS, 
List.of(bodyRow), Arrays.asList(
+            tab6 = AsciiTable.getTable(AsciiTable.NO_BORDERS, 
List.of(bodyRow), Arrays.asList(
                     new Column().dataAlign(HorizontalAlign.LEFT).maxWidth(160, 
OverflowBehaviour.NEWLINE)
                             .with(TableRow::valueAsString)));
         }
-        String tab4 = null;
+        String tab7 = null;
         jo = r.exception;
         if (jo != null) {
-            TableRow eRow = new TableRow("Exception", jo.getString("type"), 
null, jo.get("message"));
-            tab4 = AsciiTable.getTable(AsciiTable.NO_BORDERS, List.of(eRow), 
Arrays.asList(
+            eRow = new TableRow("Exception", jo.getString("type"), null, 
jo.get("message"));
+            tab7 = AsciiTable.getTable(AsciiTable.NO_BORDERS, List.of(eRow), 
Arrays.asList(
                     new Column().dataAlign(HorizontalAlign.LEFT)
-                            .minWidth(showExchangeProperties ? 11 : 
9).with(TableRow::kindAsStringRed),
+                            .minWidth(showExchangeProperties ? 12 : 
10).with(TableRow::kindAsStringRed),
                     new Column().dataAlign(HorizontalAlign.LEFT)
                             .maxWidth(40, 
OverflowBehaviour.ELLIPSIS_LEFT).with(TableRow::typeAsString),
                     new Column().dataAlign(HorizontalAlign.LEFT)
                             .maxWidth(80, 
OverflowBehaviour.NEWLINE).with(TableRow::valueAsStringRed)));
         }
         // stacktrace only (span)
-        String tab5 = null;
+        String tab8 = null;
         if (jo != null) {
-            TableRow eRow = new TableRow("Stacktrace", null, null, 
jo.get("stackTrace"));
-            tab5 = AsciiTable.getTable(AsciiTable.NO_BORDERS, List.of(eRow), 
Arrays.asList(
+            eRow = new TableRow("Stacktrace", null, null, 
jo.get("stackTrace"));
+            tab8 = AsciiTable.getTable(AsciiTable.NO_BORDERS, List.of(eRow), 
Arrays.asList(
                     new Column().dataAlign(HorizontalAlign.LEFT).maxWidth(160, 
OverflowBehaviour.NEWLINE)
                             .with(TableRow::valueAsStringRed)));
         }
-        String answer = tab1 + System.lineSeparator() + tab2;
-        if (tab3 != null) {
-            answer = answer + System.lineSeparator() + tab3;
+        String answer = "";
+        if (tab1 != null && !tab1.isEmpty()) {
+            answer = answer + tab1 + System.lineSeparator();
+        }
+        if (tab2 != null && !tab2.isEmpty()) {
+            answer = answer + tab2 + System.lineSeparator();
+        }
+        if (tab3 != null && !tab3.isEmpty()) {
+            answer = answer + tab3 + System.lineSeparator();
+        }
+        if (tab4 != null && !tab4.isEmpty()) {
+            answer = answer + tab4 + System.lineSeparator();
+        }
+        if (tab5 != null && !tab5.isEmpty()) {
+            answer = answer + tab5 + System.lineSeparator();
+        }
+        if (tab6 != null && !tab6.isEmpty()) {
+            answer = answer + tab6 + System.lineSeparator();
         }
-        if (tab4 != null) {
-            answer = answer + System.lineSeparator() + tab4;
+        if (tab7 != null && !tab7.isEmpty()) {
+            answer = answer + tab7 + System.lineSeparator();
         }
-        if (tab5 != null) {
-            answer = answer + System.lineSeparator() + tab5;
+        if (tab8 != null && !tab8.isEmpty()) {
+            answer = answer + tab8 + System.lineSeparator();
         }
         return answer;
     }


Reply via email to