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());
                 }
             }

Reply via email to