You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2022/07/08 14:52:34 UTC
[camel] 01/02: CAMEL-18260: debugger - Reflect exchange changes on BacklogTracerEventMessage
This is an automated email from the ASF dual-hosted git repository.
nfilotto pushed a commit to branch CAMEL-18260/reflect-changes-in-backlog-tracer-event-message
in repository https://gitbox.apache.org/repos/asf/camel.git
commit f70b75c1e90c18d1a80c80af3a649374daf9a38e
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Fri Jul 8 16:26:10 2022 +0200
CAMEL-18260: debugger - Reflect exchange changes on BacklogTracerEventMessage
---
.../camel/impl/debugger/BacklogDebugger.java | 38 +++++++++++++++++++---
.../camel/management/BacklogDebuggerTest.java | 22 +++++++++++++
2 files changed, 56 insertions(+), 4 deletions(-)
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogDebugger.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogDebugger.java
index f95315ed42f..d495793a4ec 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogDebugger.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogDebugger.java
@@ -382,6 +382,7 @@ public final class BacklogDebugger extends ServiceSupport {
} else {
se.getExchange().getMessage().setBody(body);
}
+ refreshBacklogTracerEventMessage(nodeId, se);
}
}
}
@@ -392,6 +393,7 @@ public final class BacklogDebugger extends ServiceSupport {
logger.log("Breakpoint at node " + nodeId + " is removing message body on exchangeId: "
+ se.getExchange().getExchangeId());
se.getExchange().getMessage().setBody(null);
+ refreshBacklogTracerEventMessage(nodeId, se);
}
}
@@ -418,6 +420,7 @@ public final class BacklogDebugger extends ServiceSupport {
} else {
se.getExchange().getMessage().setHeader(headerName, value);
}
+ refreshBacklogTracerEventMessage(nodeId, se);
}
}
@@ -435,6 +438,7 @@ public final class BacklogDebugger extends ServiceSupport {
logger.log("Breakpoint at node " + nodeId + " is removing message header on exchangeId: "
+ se.getExchange().getExchangeId() + " with header: " + headerName);
se.getExchange().getMessage().removeHeader(headerName);
+ refreshBacklogTracerEventMessage(nodeId, se);
}
}
@@ -595,6 +599,34 @@ public final class BacklogDebugger extends ServiceSupport {
suspendedBreakpointMessages.clear();
}
+ /**
+ * Refresh the content of the existing backlog tracer event message corresponding to the given node id with the new
+ * content of exchange.
+ *
+ * @param nodeId the node id for the breakpoint
+ * @param suspendedExchange the content of the new suspended exchange to use to refresh the backlog tracer event
+ * message.
+ */
+ private void refreshBacklogTracerEventMessage(String nodeId, SuspendedExchange suspendedExchange) {
+ suspendedBreakpointMessages.computeIfPresent(
+ nodeId,
+ (nId, message) -> new DefaultBacklogTracerEventMessage(
+ message.getUid(), message.getTimestamp(), message.getRouteId(), message.getToNode(),
+ message.getExchangeId(),
+ dumpAsXml(suspendedExchange.getExchange())));
+ }
+
+ /**
+ * Dumps the message as a generic XML structure.
+ *
+ * @param exchange the exchange to dump as XML
+ * @return the XML
+ */
+ private String dumpAsXml(Exchange exchange) {
+ return MessageHelper.dumpAsXml(exchange.getIn(), true, 2, isBodyIncludeStreams(), isBodyIncludeFiles(),
+ getBodyMaxChars());
+ }
+
/**
* Represents a {@link org.apache.camel.spi.Breakpoint} that has a {@link Condition} on a specific node id.
*/
@@ -623,8 +655,7 @@ public final class BacklogDebugger extends ServiceSupport {
String toNode = definition.getId();
String routeId = CamelContextHelper.getRouteId(definition);
String exchangeId = exchange.getExchangeId();
- String messageAsXml = MessageHelper.dumpAsXml(exchange.getIn(), true, 2, isBodyIncludeStreams(),
- isBodyIncludeFiles(), getBodyMaxChars());
+ String messageAsXml = dumpAsXml(exchange);
long uid = debugCounter.incrementAndGet();
BacklogTracerEventMessage msg
@@ -686,8 +717,7 @@ public final class BacklogDebugger extends ServiceSupport {
String toNode = definition.getId();
String routeId = CamelContextHelper.getRouteId(definition);
String exchangeId = exchange.getExchangeId();
- String messageAsXml = MessageHelper.dumpAsXml(exchange.getIn(), true, 2, isBodyIncludeStreams(),
- isBodyIncludeFiles(), getBodyMaxChars());
+ String messageAsXml = dumpAsXml(exchange);
long uid = debugCounter.incrementAndGet();
BacklogTracerEventMessage msg
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java b/core/camel-management/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
index 21386b3526c..1d1cc1c443c 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
@@ -250,6 +250,28 @@ public class BacklogDebuggerTest extends ManagementTestSupport {
"Should contain our added header");
assertTrue(xml.contains("<exchangeProperty name=\"food\" type=\"java.lang.Integer\">987</exchangeProperty>"),
"Should contain our added exchange property");
+
+ // update body and header
+ mbeanServer.invoke(on, "setMessageBodyOnBreakpoint", new Object[] { "bar", "555", "java.lang.Integer" },
+ new String[] { "java.lang.String", "java.lang.Object", "java.lang.String" });
+ mbeanServer.invoke(on, "setMessageHeaderOnBreakpoint", new Object[] { "bar", "wine", "456", "java.lang.Integer" },
+ new String[] { "java.lang.String", "java.lang.String", "java.lang.Object", "java.lang.String" });
+ mbeanServer.invoke(on, "setExchangePropertyOnBreakpoint", new Object[] { "bar", "drink", "798", "java.lang.Integer" },
+ new String[] { "java.lang.String", "java.lang.String", "java.lang.Object", "java.lang.String" });
+
+ // the message should be updated
+ xml = (String) mbeanServer.invoke(on, "dumpTracedMessagesAsXml", new Object[] { "bar", true },
+ new String[] { "java.lang.String", "boolean" });
+ assertNotNull(xml);
+ log.info(xml);
+
+ assertTrue(xml.contains("555"), "Should contain our body");
+ assertTrue(xml.contains("<toNode>bar</toNode>"), "Should contain bar node");
+ assertTrue(xml.contains("<header key=\"wine\" type=\"java.lang.Integer\">456</header>"),
+ "Should contain our added header");
+ assertTrue(xml.contains("<exchangeProperty name=\"drink\" type=\"java.lang.Integer\">798</exchangeProperty>"),
+ "Should contain our added exchange property");
+
resetMocks();
mock.expectedMessageCount(1);