You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2024/11/11 11:15:00 UTC

[jira] [Updated] (CAMEL-21420) camel-yaml-io - YAML model serializer is not serializing XPath expression namespaces

     [ https://issues.apache.org/jira/browse/CAMEL-21420?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Claus Ibsen updated CAMEL-21420:
--------------------------------
    Summary: camel-yaml-io - YAML model serializer is not serializing XPath expression namespaces  (was: YAML model serializer is not serializing XPath expression namespaces)

> camel-yaml-io - YAML model serializer is not serializing XPath expression namespaces
> ------------------------------------------------------------------------------------
>
>                 Key: CAMEL-21420
>                 URL: https://issues.apache.org/jira/browse/CAMEL-21420
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-yaml-dsl
>    Affects Versions: 4.8.1
>            Reporter: Adriano Machado
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.9.0
>
>
> Here's a unit test showing the problem:
>  
> {code:java}
> package org.apache.camel.yaml.out;
> import java.io.ByteArrayInputStream;
> import java.io.StringWriter;
> import java.nio.charset.Charset;
> import java.util.Optional;
> import org.apache.camel.model.ProcessorDefinition;
> import org.apache.camel.model.RouteDefinition;
> import org.apache.camel.model.RoutesDefinition;
> import org.apache.camel.xml.in.ModelParser;
> import org.assertj.core.api.InstanceOfAssertFactories;
> import org.junit.jupiter.api.Test;
> import static org.assertj.core.api.Assertions.assertThat;
> class XPathNamespacesTest {
>     @Test
>     void test() throws Exception {
>         try (ByteArrayInputStream is = new ByteArrayInputStream(XML.getBytes(Charset.defaultCharset()))) {
>             Optional<RoutesDefinition> routesDefinition = new ModelParser(is, XmlToYamlTest.NAMESPACE).parseRoutesDefinition();
>             assertThat(routesDefinition).isPresent()
>                     .get(InstanceOfAssertFactories.type(RoutesDefinition.class))
>                     .extracting(RoutesDefinition::getRoutes, InstanceOfAssertFactories.list(RouteDefinition.class))
>                     .singleElement()
>                     .extracting(RouteDefinition::getOutputs, InstanceOfAssertFactories.list(ProcessorDefinition.class))
>                     .hasSize(3);
>             StringWriter sw = new StringWriter();
>             new org.apache.camel.yaml.out.ModelWriter(sw).writeRoutesDefinition(routesDefinition.get());
>             assertThat(sw).hasToString(EXPECTED_YAML);
>         }
>     }
>     //language=XML
>     private static final String XML = """
>             <routes xmlns="http://camel.apache.org/schema/spring"
>                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>                     xmlns:routes-ns-def="http://www.example.com/schema"
>                     xsi:schemaLocation="http://camel.apache.org/schema/spring https://camel.apache.org/schema/spring/camel-spring.xsd">
>             
>                 <route id="direct:route-with-xpath-expression-custom-namespace"
>                        xmlns:route-ns-def="http://www.example.com/schema">
>             
>                     <from uri="direct:route-with-xpath-expression-custom-namespace"/>
>             
>                     <setProperty name="child-expression-namespace-from-routes">
>                         <xpath saxon="true" resultType="java.lang.String">/routes-ns-def:parent/routes-ns-def:child</xpath>
>                     </setProperty>
>             
>                     <setProperty name="child-expression-namespace-from-route">
>                         <xpath saxon="true" resultType="java.lang.String">/route-ns-def:parent/route-ns-def:child</xpath>
>                     </setProperty>
>             
>                     <setProperty name="child-expression-namespace-from-xpath">
>                         <xpath saxon="true" resultType="java.lang.String" xmlns:expression-ns-def="http://www.example.com/schema">/expression-ns-def:parent/expression-ns-def:child</xpath>
>                     </setProperty>
>                 </route>
>             
>             </routes>
>             """;
>     
>     //language=yaml
>     private static final String EXPECTED_YAML = """
>             - route:
>                 id: direct:route-with-xpath-expression-custom-namespace
>                 from:
>                   uri: direct:route-with-xpath-expression-custom-namespace
>                   steps:
>                     - setProperty:
>                         name: child-expression-namespace-from-routes
>                         xpath:
>                           resultType: java.lang.String
>                           saxon: "true"
>                           namespace:
>                             xsi: http://www.w3.org/2001/XMLSchema-instance
>                             routes-ns-def: http://www.example.com/schema
>                             route-ns-def: http://www.example.com/schema
>                           expression: /routes-ns-def:parent/routes-ns-def:child
>                     - setProperty:
>                         name: child-expression-namespace-from-route
>                         xpath:
>                           resultType: java.lang.String
>                           saxon: "true"
>                           namespace:
>                             xsi: http://www.w3.org/2001/XMLSchema-instance
>                             routes-ns-def: http://www.example.com/schema
>                             route-ns-def: http://www.example.com/schema
>                           expression: /route-ns-def:parent/route-ns-def:child
>                     - setProperty:
>                         name: child-expression-namespace-from-xpath
>                         xpath:
>                           resultType: java.lang.String
>                           saxon: "true"
>                           namespace:
>                             xsi: http://www.w3.org/2001/XMLSchema-instance
>                             routes-ns-def: http://www.example.com/schema
>                             route-ns-def: http://www.example.com/schema
>                             expression-ns-def: http://www.example.com/schema
>                           expression: /expression-ns-def:parent/expression-ns-def:child
>             """;
> }
>  {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)