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 5439cd17b44 CAMEL-21620: camel-core - Choice EIP fix to make
when/otherwise as exclusive for this EIP and not generic EIPs
5439cd17b44 is described below
commit 5439cd17b44a7d648f51581c69871621814e6736
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Jan 19 20:41:55 2025 +0100
CAMEL-21620: camel-core - Choice EIP fix to make when/otherwise as
exclusive for this EIP and not generic EIPs
---
.../java/org/apache/camel/xml/jaxb/JaxbHelper.java | 43 ++++++++++++++++++--
.../jaxb/definition/CreateModelFromXmlTest.java | 46 +++++++++++++++-------
2 files changed, 71 insertions(+), 18 deletions(-)
diff --git
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbHelper.java
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbHelper.java
index 3c863ffef41..b6714f4f3b5 100644
---
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbHelper.java
+++
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbHelper.java
@@ -42,6 +42,7 @@ import org.apache.camel.Expression;
import org.apache.camel.NamedNode;
import org.apache.camel.TypeConversionException;
import org.apache.camel.converter.jaxp.XmlConverter;
+import org.apache.camel.model.BasicExpressionNode;
import org.apache.camel.model.ExpressionNode;
import org.apache.camel.model.FromDefinition;
import org.apache.camel.model.OptionalIdentifiedDefinition;
@@ -84,8 +85,16 @@ public final class JaxbHelper {
* @param namespaces the map of namespaces to add discovered XML
namespaces into
*/
public static void extractNamespaces(RouteDefinition route, Map<String,
String> namespaces) {
- Collection<ExpressionNode> col =
filterTypeInOutputs(route.getOutputs(), ExpressionNode.class);
- for (ExpressionNode en : col) {
+ for (ExpressionNode en : filterTypeInOutputs(route.getOutputs(),
ExpressionNode.class)) {
+ NamespaceAware na = getNamespaceAwareFromExpression(en);
+ if (na != null) {
+ Map<String, String> map = na.getNamespaces();
+ if (map != null && !map.isEmpty()) {
+ namespaces.putAll(map);
+ }
+ }
+ }
+ for (BasicExpressionNode<?> en :
filterTypeInOutputs(route.getOutputs(), BasicExpressionNode.class)) {
NamespaceAware na = getNamespaceAwareFromExpression(en);
if (na != null) {
Map<String, String> map = na.getNamespaces();
@@ -147,7 +156,21 @@ public final class JaxbHelper {
}
}
- public static NamespaceAware
getNamespaceAwareFromExpression(ExpressionNode expressionNode) {
+ private static NamespaceAware
getNamespaceAwareFromExpression(ExpressionNode expressionNode) {
+ ExpressionDefinition ed = expressionNode.getExpression();
+
+ NamespaceAware na = null;
+ Expression exp = ed.getExpressionValue();
+ if (exp instanceof NamespaceAware namespaceAware) {
+ na = namespaceAware;
+ } else if (ed instanceof NamespaceAware namespaceAware) {
+ na = namespaceAware;
+ }
+
+ return na;
+ }
+
+ private static NamespaceAware
getNamespaceAwareFromExpression(BasicExpressionNode expressionNode) {
ExpressionDefinition ed = expressionNode.getExpression();
NamespaceAware na = null;
@@ -240,6 +263,13 @@ public final class JaxbHelper {
na.setNamespaces(namespaces);
}
}
+ Collection<BasicExpressionNode> col2 =
filterTypeInOutputs(route.getOutputs(), BasicExpressionNode.class);
+ for (BasicExpressionNode en : col2) {
+ NamespaceAware na = getNamespaceAwareFromExpression(en);
+ if (na != null) {
+ na.setNamespaces(namespaces);
+ }
+ }
}
public static void applyNamespaces(RouteConfigurationDefinition config,
Map<String, String> namespaces) {
@@ -257,6 +287,13 @@ public final class JaxbHelper {
na.setNamespaces(namespaces);
}
}
+ Collection<BasicExpressionNode> col2 =
filterTypeInOutputs(def.getOutputs(), BasicExpressionNode.class);
+ for (BasicExpressionNode en : col2) {
+ NamespaceAware na = getNamespaceAwareFromExpression(en);
+ if (na != null) {
+ na.setNamespaces(namespaces);
+ }
+ }
}
}
diff --git
a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/CreateModelFromXmlTest.java
b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/CreateModelFromXmlTest.java
index 053a904e9a2..f4b2e4603bc 100644
---
a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/CreateModelFromXmlTest.java
+++
b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/CreateModelFromXmlTest.java
@@ -24,6 +24,7 @@ import java.util.Map;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Expression;
import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.model.BasicExpressionNode;
import org.apache.camel.model.ExpressionNode;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.RoutesDefinition;
@@ -105,21 +106,36 @@ public class CreateModelFromXmlTest extends
ContextTestSupport {
private void assertNamespacesPresent(RoutesDefinition routesDefinition,
Map<String, String> expectedNamespaces) {
for (RouteDefinition route : routesDefinition.getRoutes()) {
Collection<ExpressionNode> col =
filterTypeInOutputs(route.getOutputs(), ExpressionNode.class);
- if (col.isEmpty()) {
- fail("Expected to find at least one ExpressionNode in route");
- } else {
- for (ExpressionNode en : col) {
- ExpressionDefinition ed = en.getExpression();
-
- NamespaceAware na = null;
- Expression exp = ed.getExpressionValue();
- if (exp instanceof NamespaceAware) {
- na = (NamespaceAware) exp;
- } else if (ed instanceof NamespaceAware) {
- na = (NamespaceAware) ed;
- }
-
- assertNotNull(na);
+ for (ExpressionNode en : col) {
+ ExpressionDefinition ed = en.getExpression();
+
+ NamespaceAware na = null;
+ Expression exp = ed.getExpressionValue();
+ if (exp instanceof NamespaceAware) {
+ na = (NamespaceAware) exp;
+ } else if (ed instanceof NamespaceAware) {
+ na = (NamespaceAware) ed;
+ }
+
+ assertNotNull(na);
+ if (na.getNamespaces() != null) {
+ assertEquals(expectedNamespaces, na.getNamespaces());
+ }
+ }
+ Collection<BasicExpressionNode> col2 =
filterTypeInOutputs(route.getOutputs(), BasicExpressionNode.class);
+ for (BasicExpressionNode en : col2) {
+ ExpressionDefinition ed = en.getExpression();
+
+ NamespaceAware na = null;
+ Expression exp = ed.getExpressionValue();
+ if (exp instanceof NamespaceAware) {
+ na = (NamespaceAware) exp;
+ } else if (ed instanceof NamespaceAware) {
+ na = (NamespaceAware) ed;
+ }
+
+ assertNotNull(na);
+ if (na.getNamespaces() != null) {
assertEquals(expectedNamespaces, na.getNamespaces());
}
}