This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch ih in repository https://gitbox.apache.org/repos/asf/camel.git
commit c3535d56a1bb6033292a16d5076fa8a95f0e2c6c Author: Claus Ibsen <[email protected]> AuthorDate: Sun Nov 23 14:26:04 2025 +0100 CAMEL-22693: Mark up EIP and endpoint headers that are of importance to make tooling, trouble shooting and development easier. --- .../src/main/java/org/apache/camel/NamedNode.java | 14 +++++++++++ .../camel/spi/BacklogTracerEventMessage.java | 10 ++++++++ .../impl/debugger/DefaultBacklogDebugger.java | 16 +++++++------ .../debugger/DefaultBacklogTracerEventMessage.java | 25 +++++++++++++++++-- .../camel/impl/engine/CamelInternalProcessor.java | 28 +++++++++++++++++----- .../org/apache/camel/model/ChoiceDefinition.java | 24 +++++++++++++++++++ .../core/commands/action/CamelHistoryAction.java | 8 +++++++ 7 files changed, 110 insertions(+), 15 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/NamedNode.java b/core/camel-api/src/main/java/org/apache/camel/NamedNode.java index 85cdf53a7663..e34600e8f783 100644 --- a/core/camel-api/src/main/java/org/apache/camel/NamedNode.java +++ b/core/camel-api/src/main/java/org/apache/camel/NamedNode.java @@ -93,4 +93,18 @@ public interface NamedNode extends LineNumberAware { return null; } + /** + * Special methods for Choice EIP + */ + default NamedNode findMatchingWhen(String id) { + return null; + } + + /** + * Special methods for Choice EIP + */ + default NamedNode findMatchingOtherwise(String id) { + return null; + } + } diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java b/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java index e53d49d94d80..20aacafdd3d5 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java @@ -78,6 +78,16 @@ public interface BacklogTracerEventMessage { */ String getToNodeParentId(); + /** + * Special for choice where we want to know which when predicate was triggered + */ + String getToNodeParentWhenId(); + + /** + * Special for choice where we want to know which when predicate was triggered + */ + String getToNodeParentWhenLabel(); + /** * Node short name where the message is being routed to */ diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java index b0d3eecf9998..fd20892131d3 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java @@ -885,8 +885,10 @@ public final class DefaultBacklogDebugger extends ServiceSupport implements Back (nId, message) -> new DefaultBacklogTracerEventMessage( camelContext, false, false, message.getUid(), message.getTimestamp(), message.getLocation(), message.getRouteId(), - message.getToNode(), message.getToNodeShortName(), message.getToNodeLabel(), message.getToNodeParentId(), message.getToNodeLevel(), - message.getExchangeId(), message.getCorrelationExchangeId(), + message.getToNode(), message.getToNodeParentId(), message.getToNodeParentWhenId(), + message.getToNodeParentWhenLabel(), + message.getToNodeShortName(), message.getToNodeLabel(), + message.getToNodeLevel(), message.getExchangeId(), message.getCorrelationExchangeId(), false, false, dumpAsJSonObject(suspendedExchange.getExchange()))); } @@ -937,7 +939,7 @@ public final class DefaultBacklogDebugger extends ServiceSupport implements Back BacklogTracerEventMessage msg = new DefaultBacklogTracerEventMessage( camelContext, - first, false, uid, timestamp, source, routeId, toNode, toNodeParentId, + first, false, uid, timestamp, source, routeId, toNode, toNodeParentId, null, null, toNodeShortName, toNodeLabel, level, exchangeId, correlationExchangeId, false, false, data); suspendedBreakpointMessages.put(nodeId, msg); @@ -1026,7 +1028,7 @@ public final class DefaultBacklogDebugger extends ServiceSupport implements Back BacklogTracerEventMessage msg = new DefaultBacklogTracerEventMessage( camelContext, - false, false, uid, timestamp, source, routeId, toNode, toNodeParentId, + false, false, uid, timestamp, source, routeId, toNode, toNodeParentId, null, null, toNodeShortName, toNodeLabel, level, exchangeId, correlationExchangeId, false, false, data); @@ -1135,9 +1137,9 @@ public final class DefaultBacklogDebugger extends ServiceSupport implements Back BacklogTracerEventMessage msg = new DefaultBacklogTracerEventMessage( camelContext, - false, true, uid, timestamp, source, routeId, toNode, toNodeParentId, - null, null, level, exchangeId, correlationExchangeId, - false, false, data); + false, true, uid, timestamp, source, routeId, toNode, toNodeParentId, + null, null, null, null, level, exchangeId, correlationExchangeId, + false, false, data); // we want to capture if there was an exception if (cause != null) { msg.setException(cause); diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java index 14c1dd84408d..a299be7b7918 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java @@ -46,6 +46,8 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven private final String routeId; private final String toNode; private final String toNodeParentId; + private final String toNodeParentWhenId; + private final String toNodeParentWhenLabel; private final String toNodeShortName; private final String toNodeLabel; private final int toNodeLevel; @@ -70,8 +72,9 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven private boolean done; public DefaultBacklogTracerEventMessage(CamelContext camelContext, boolean first, boolean last, long uid, long timestamp, - String location, String routeId, String toNode, String toNodeParentId, String toNodeShortName, - String toNodeLabel, int toNodeLevel, String exchangeId, + String location, String routeId, String toNode, String toNodeParentId, + String toNodeParentWhenId, String toNodeParentWhenLabel, + String toNodeShortName, String toNodeLabel, int toNodeLevel, String exchangeId, String correlationExchangeId, boolean rest, boolean template, JsonObject data) { this.camelContext = camelContext; @@ -84,6 +87,8 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven this.routeId = routeId; this.toNode = toNode; this.toNodeParentId = toNodeParentId; + this.toNodeParentWhenId = toNodeParentWhenId; + this.toNodeParentWhenLabel = toNodeParentWhenLabel; this.toNodeShortName = toNodeShortName; this.toNodeLabel = toNodeLabel; this.toNodeLevel = toNodeLevel; @@ -153,6 +158,16 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven return toNodeParentId; } + @Override + public String getToNodeParentWhenId() { + return toNodeParentWhenId; + } + + @Override + public String getToNodeParentWhenLabel() { + return toNodeParentWhenLabel; + } + @Override public String getToNodeShortName() { return toNodeShortName; @@ -541,6 +556,12 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven if (toNodeParentId != null) { jo.put("nodeParentId", toNodeParentId); } + if (toNodeParentWhenId != null) { + jo.put("nodeParentWhenId", toNodeParentWhenId); + } + if (toNodeParentWhenLabel != null) { + jo.put("nodeParentWhenLabel", toNodeParentWhenLabel); + } if (toNodeShortName != null) { jo.put("nodeShortName", toNodeShortName); } diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java index 77cc3546d467..c2b0e649127a 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java @@ -653,6 +653,20 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In String toNode = processorDefinition.getId(); String toNodeParentId = processorDefinition.getParentId(); String toNodeShortName = processorDefinition.getShortName(); + // special for choice as we want to know which when predicate that was triggered + String toNodeParentWhenId = null; + String toNodeParentWhenLabel = null; + NamedNode pn = processorDefinition.getParent(); + if (pn != null && "choice".equals(pn.getShortName())) { + NamedNode mn = pn.findMatchingWhen(processorDefinition.getId()); + if (mn == null) { + mn = pn.findMatchingOtherwise(processorDefinition.getId()); + } + if (mn != null) { + toNodeParentWhenId = mn.getId(); + toNodeParentWhenLabel = mn.getLabel(); + } + } String toNodeLabel = StringHelper.limitLength(processorDefinition.getLabel(), 50); String exchangeId = exchange.getExchangeId(); String correlationExchangeId = exchange.getProperty(ExchangePropertyKey.CORRELATION_ID, String.class); @@ -673,9 +687,10 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In final long created = exchange.getClock().getCreated(); DefaultBacklogTracerEventMessage pseudoFirst = new DefaultBacklogTracerEventMessage( camelContext, - true, false, backlogTracer.incrementTraceCounter(), created, source, routeId, null, null, null, null, - level, - exchangeId, correlationExchangeId, rest, template, data); + true, false, backlogTracer.incrementTraceCounter(), created, source, routeId, null, null, null, + null, + null, null, + level, exchangeId, correlationExchangeId, rest, template, data); if (exchange.getFromEndpoint() instanceof EndpointServiceLocation esl) { pseudoFirst.setEndpointServiceUrl(esl.getServiceUrl()); pseudoFirst.setEndpointServiceProtocol(esl.getServiceProtocol()); @@ -688,6 +703,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In DefaultBacklogTracerEventMessage event = new DefaultBacklogTracerEventMessage( camelContext, false, false, backlogTracer.incrementTraceCounter(), timestamp, source, routeId, toNode, toNodeParentId, + toNodeParentWhenId, toNodeParentWhenLabel, toNodeShortName, toNodeLabel, level, exchangeId, correlationExchangeId, rest, template, data); backlogTracer.traceEvent(event); @@ -716,9 +732,9 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In backlogTracer.getBodyMaxChars()); DefaultBacklogTracerEventMessage pseudoLast = new DefaultBacklogTracerEventMessage( camelContext, - false, true, backlogTracer.incrementTraceCounter(), created, source, routeId, null, null, null, null, - level, - exchangeId, correlationExchangeId, rest, template, data); + false, true, backlogTracer.incrementTraceCounter(), created, source, routeId, null, null, null, + null, null, null, + level, exchangeId, correlationExchangeId, rest, template, data); backlogTracer.traceEvent(pseudoLast); doneProcessing(exchange, pseudoLast); doneProcessing(exchange, pseudoFirst); diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java index 64e2dd5abc7a..e26e5b5227de 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java @@ -233,6 +233,30 @@ public class ChoiceDefinition extends NoOutputDefinition<ChoiceDefinition> { return answer; } + @Override + public WhenDefinition findMatchingWhen(String id) { + for (WhenDefinition when : whenClauses) { + for (ProcessorDefinition<?> out : when.getOutputs()) { + if (out.getId().equals(id)) { + return when; + } + } + } + return null; + } + + public OtherwiseDefinition findMatchingOtherwise(String id) { + if (otherwise != null) { + for (ProcessorDefinition<?> out : otherwise.getOutputs()) { + if (out.getId().equals(id)) { + return otherwise; + } + } + return otherwise; + } + return null; + } + // Properties // ------------------------------------------------------------------------- diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java index 2cc32a804227..ded96c12981d 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java @@ -243,6 +243,8 @@ public class CamelHistoryAction extends ActionWatchCommand { row.routeId = jo.getString("routeId"); row.nodeId = jo.getString("nodeId"); row.nodeParentId = jo.getString("nodeParentId"); + row.nodeParentWhenId = jo.getString("nodeParentWhenId"); + row.nodeParentWhenLabel = jo.getString("nodeParentWhenLabel"); row.nodeShortName = jo.getString("nodeShortName"); row.nodeLabel = jo.getString("nodeLabel"); if (mask) { @@ -317,6 +319,10 @@ public class CamelHistoryAction extends ActionWatchCommand { } else { r.summary = "Filter: false"; } + } else if ("choice".equals(r.nodeShortName)) { + if (next != null && r.nodeId != null && r.nodeId.equals(next.nodeParentId)) { + r.summary = next.nodeParentWhenLabel; + } } else if ("split".equals(r.nodeShortName)) { if (next != null && r.nodeId != null && r.nodeId.equals(next.nodeParentId)) { var map = extractEipModel("split", next); @@ -401,6 +407,8 @@ public class CamelHistoryAction extends ActionWatchCommand { String routeId; String nodeId; String nodeParentId; + String nodeParentWhenId; + String nodeParentWhenLabel; String nodeShortName; String nodeLabel; int nodeLevel;
