[ 
https://issues.apache.org/jira/browse/CAMEL-10509?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15706383#comment-15706383
 ] 

ASF GitHub Bot commented on CAMEL-10509:
----------------------------------------

Github user jamesnetherton closed the pull request at:

    https://github.com/apache/camel/pull/1318


> ManagedCamelContextMBean - additional namespaces are removed
> ------------------------------------------------------------
>
>                 Key: CAMEL-10509
>                 URL: https://issues.apache.org/jira/browse/CAMEL-10509
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>    Affects Versions: 2.18.0
>            Reporter: Aurelien Pupier
>            Assignee: James Netherton
>             Fix For: 2.18.2, 2.19.0
>
>
> - Use a specific namespace, declared at CamelContext level, in an Xpath 
> expression of a When
> something like:
> {noformat}
> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> xsi:schemaLocation="              http://www.osgi.org/xmlns/blueprint/v1.0.0 
> https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd              
> http://camel.apache.org/schema/blueprint 
> http://camel.apache.org/schema/blueprint/camel-blueprint.xsd";>
>     <!--
>       The namespace for the camelContext element in Blueprint is 
> 'https://camel.apache.org/schema/blueprint'. Additionally,
>       we can also define namespace prefixes we want to use them in the XPath 
> expressions in our CBR.
>       While it is not required to assign id's to the <camelContext/> and 
> <route/> elements, it is a good idea
>       to set those for runtime management purposes (logging, JMX MBeans, ...)
>     -->
>     <camelContext id="cbr-example-context"
>         xmlns="http://camel.apache.org/schema/blueprint"; 
> xmlns:order="http://fabric8.com/examples/order/v7";>
>         <!--
>           When this route is started, it will automatically create the 
> work/cbr/input directory where you can drop the
>           file that need to be processed.
>           The <log/> elements are used to add human-friendly business logging 
> statements. They make it easier to see what the
>           route is doing.
>           The <choice/> element contains the content based router. The two 
> <when/> clauses use XPath to define the criteria 
>           for entering that part of the route. When the country in the XML 
> message is set to UK or US, the file will be 
>           moved to a directory for that country. The <otherwise/> element 
> ensures that any file that does not meet the 
>           requirements for either of the <when/> elements will be moved to 
> the work/cbr/output/others directory.
>         -->
>         <route id="cbr-route">
>             <from id="_from1" uri="file:work/cbr/input"/>
>             <log id="_log1" message="Receiving order ${file:name}"/>
>             <choice id="_choice1">
>                 <when id="_when1">
>                     <xpath 
> id="_xpath1">/order:order/order:customer/order:country = 'UK'</xpath>
>                     <log id="_log2" message="Sending order ${file:name} to 
> the UK"/>
>                     <to id="_to1" uri="file:work/cbr/output/uk"/>
>                 </when>
>                 <when id="_when2">
>                     <xpath 
> id="_xpath2">/order:order/order:customer/order:country = 'US'</xpath>
>                     <log id="_log3" message="Sending order ${file:name} to 
> the US"/>
>                     <to id="_to2" uri="file:work/cbr/output/us"/>
>                 </when>
>                 <otherwise id="_otherwise1">
>                     <log id="_log4" message="Sending order ${file:name} to 
> another country"/>
>                     <to id="_to3" uri="file:work/cbr/output/others"/>
>                 </otherwise>
>             </choice>
>             <log id="_log5" message="Done processing ${file:name}"/>
>         </route>
>     </camelContext>
> </blueprint>
> {noformat}
> - Deploy the project
> - Using MBean retrieve dumpRoutesAsXml is providing a route without the 
> additional xml namespace provided 
> xmlns:order="http://fabric8.com/examples/order/v7";
> {noformat}
> <?xml version="1.0" encoding="UTF-8"?>
> <routes id="cbr-example-context" 
> xmlns="http://camel.apache.org/schema/spring";>
>     <route customId="true" id="cbr-route">
>         <from customId="true" id="_from1" uri="file:work/cbr/input"/>
>         <log customId="true" id="_log1" message="XXXYYY"/>
>         <choice customId="true" id="_choice1">
>             <when customId="true" id="_when1">
>                 <xpath id="_xpath1">/order:order/order:customer/order:country 
> = 'UK'</xpath>
>                 <log customId="true" id="_log2" message="Sending order 
> ${file:name} to the UK"/>
>                 <to customId="true" id="_to1" uri="file:work/cbr/output/uk"/>
>             </when>
>             <when customId="true" id="_when2">
>                 <xpath id="_xpath2">/order:order/order:customer/order:country 
> = 'US'</xpath>
>                 <log customId="true" id="_log3" message="Sending order 
> ${file:name} to the US"/>
>                 <to customId="true" id="_to2" uri="file:work/cbr/output/us"/>
>             </when>
>             <otherwise customId="true" id="_otherwise1">
>                 <log customId="true" id="_log4" message="Sending order 
> ${file:name} to another country"/>
>                 <to customId="true" id="_to3" 
> uri="file:work/cbr/output/others"/>
>             </otherwise>
>         </choice>
>         <log customId="true" id="_log5" message="Done processing 
> ${file:name}"/>
>     </route>
> </routes>
> {noformat}
> - Then use addOrUpdateRoutesFromXml to upload the exact same xml, you will 
> get exceptions when the When code is invoked:
> {noformat}
> Message History
> ---------------------------------------------------------------------------------------------------------------------------------------
> RouteId              ProcessorId          Processor                           
>                                              Elapsed (ms)
> [cbr-route         ] [cbr-route         ] [file://work/cbr/input              
>                                            ] [         1]
> [cbr-route         ] [_log1             ] [log                                
>                                            ] [         0]
> [cbr-route         ] [_choice1          ] [when[xpath{XPath: 
> /order:order/order:customer/order:country = 'UK'}]choice[whe] [         1]
> Stacktrace
> ---------------------------------------------------------------------------------------------------------------------------------------
> org.apache.camel.builder.xml.InvalidXPathExpression: Invalid xpath: 
> /order:order/order:customer/order:country = 'UK'. Reason: 
> javax.xml.xpath.XPathExpressionException: 
> com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: Prefix 
> must resolve to a namespace: order
>       at 
> org.apache.camel.builder.xml.XPathBuilder.evaluateAs(XPathBuilder.java:769)
>       at 
> org.apache.camel.builder.xml.XPathBuilder.matches(XPathBuilder.java:155)
>       at 
> org.apache.camel.processor.FilterProcessor.matches(FilterProcessor.java:65)
>       at 
> org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:93)
>       at 
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
>       at 
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
>       at 
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
>       at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
>       at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
>       at 
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
>       at 
> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:454)
>       at 
> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:226)
>       at 
> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:190)
>       at 
> org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175)
>       at 
> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102)
>       at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>       at java.lang.Thread.run(Thread.java:745)
> Caused by: javax.xml.xpath.XPathExpressionException: 
> com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: Prefix 
> must resolve to a namespace: order
>       at 
> com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:400)
>       at 
> org.apache.camel.builder.xml.XPathBuilder.createXPathExpression(XPathBuilder.java:958)
>       at 
> org.apache.camel.builder.xml.XPathBuilder.evaluateAs(XPathBuilder.java:767)
>       ... 21 more
> Caused by: 
> com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: Prefix 
> must resolve to a namespace: order
>       at 
> com.sun.org.apache.xpath.internal.compiler.XPathParser.errorForDOM3(XPathParser.java:657)
>       at 
> com.sun.org.apache.xpath.internal.compiler.Lexer.mapNSTokens(Lexer.java:642)
>       at 
> com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:269)
>       at 
> com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:100)
>       at 
> com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(XPathParser.java:114)
>       at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:180)
>       at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:268)
>       at 
> com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:392)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to