Hi

Thanks for reporting. I have reproduced the issue and created a ticket
https://issues.apache.org/jira/browse/CAMEL-4519

On Tue, Oct 4, 2011 at 8:27 PM, green.sea <casey.lewis.gr...@gmail.com> wrote:
> Hi,
> I'm trying to inject a property into a <xpath> tag in a Spring camelContext.
>
> According to http://camel.apache.org/xpath.html there exists a function
> "function:properties()" that should pull a property from a configured
> <propertyPlaceholder> configuration file.  This does not seem to work as
> described/expected, but perhaps I'm missing something.  I've tried camel v.
> 2.5, and every release afterwards.
>
> *Dependencies:*
>
>        <dependency>
>            <groupId>org.apache.camel</groupId>
>            <artifactId>camel-core</artifactId>
>            <version>${camel.version}</version>
>        </dependency>
>        <dependency>
>            <groupId>org.apache.camel</groupId>
>            <artifactId>camel-jms</artifactId>
>            <version>${camel.version}</version>
>        </dependency>
>        <dependency>
>            <groupId>org.apache.camel</groupId>
>            <artifactId>camel-mvel</artifactId>
>            <version>${camel.version}</version>
>        </dependency>
>        <dependency>
>            <groupId>org.apache.camel</groupId>
>            <artifactId>camel-quartz</artifactId>
>            <version>${camel.version}</version>
>        </dependency>
>        <dependency>
>            <groupId>org.apache.camel</groupId>
>            <artifactId>camel-spring</artifactId>
>            <version>${camel.version}</version>
>        </dependency>
>        <dependency>
>            <groupId>org.apache.camel</groupId>
>            <artifactId>camel-saxon</artifactId>
>            <version>${camel.version}</version>
>        </dependency>
>
> *Spring Configuration:*
>
> <camelContext id="routes"  xmlns="http://camel.apache.org/schema/spring";>
>
>        <propertyPlaceholder id="properties"
> location="classpath:camel/mappings.properties"/>
>
>        <route id="splitter">
>            ...
>
>
>            <split>
>                <xpath>function:properties('split.message.at.xpath')</xpath>
>                <to uri="direct:enrich"/>
>            </split>
>        </route>
>        ...
>        <route id="someRoute">
>            <from uri="direct:enrich"/>
>            ...
>            <setHeader headerName="name">
>                <xpath
> resultType="java.lang.String">function:properties('name.xpath')</xpath>
>            </setHeader>
>            ...
>        </route>
>
>        ...
> </camelContext>
>
>
> *mappings.properties:*
>
> split.message.at.xpath=/Objects/object
> name.xpath=/object/name
>
>
> The exception occurs at the splitter.
> *Exception:*
>
> org.apache.camel.builder.xml.InvalidXPathExpression: Invalid xpath:
> function:properties('split.message.at.xpath'). Reason:
> javax.xml.xpath.XPathExpressionException
>        at
> org.apache.camel.builder.xml.XPathBuilder.doInEvaluateAs(XPathBuilder.java:671)
>        at
> org.apache.camel.builder.xml.XPathBuilder.evaluateAs(XPathBuilder.java:629)
>        at
> org.apache.camel.builder.xml.XPathBuilder.evaluate(XPathBuilder.java:602)
>        at
> org.apache.camel.builder.xml.XPathBuilder.evaluate(XPathBuilder.java:131)
>        at
> org.apache.camel.processor.Splitter.createProcessorExchangePairs(Splitter.java:99)
>        at
> org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:200)
>        at org.apache.camel.processor.Splitter.process(Splitter.java:94)
>        at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:77)
>        at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>        at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>        at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>        at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:77)
>        at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>        at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>        at
> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:99)
>        at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:77)
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:299)
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:208)
>        at
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:269)
>        at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:109)
>        at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:77)
>        at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>        at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>        at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>        at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:103)
>        at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)
>        at
> org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:92)
>        at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:559)
>        at
> org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:498)
>        at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)
>        at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
>        at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
>        at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:977)
>        at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:969)
>        at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:871)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>        at java.lang.Thread.run(Thread.java:662)
> Caused by: javax.xml.xpath.XPathExpressionException
>        at
> net.sf.saxon.xpath.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:357)
>        at
> org.apache.camel.builder.xml.XPathBuilder.doInEvaluateAs(XPathBuilder.java:657)
>        ... 37 more
> *Caused by: net.sf.saxon.trans.XPathException: Extension function required
> class org.w3c.dom.NodeList; supplied value of class
> net.sf.saxon.value.StringValue could not be converted
>        at
> net.sf.saxon.dom.DOMObjectModel.convertXPathValueToObject(DOMObjectModel.java:395)
>        at net.sf.saxon.dom.DOMObjectModel.access$000(DOMObjectModel.java:42)
>        at net.sf.saxon.dom.DOMObjectModel$5.convert(DOMObjectModel.java:166)
>        at
> net.sf.saxon.xpath.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:352)
>        ... 38 more*
>
>
> Note, this works fine if I hardcode the value instead of sourcing it from a
> property file.
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Using-properties-in-XPath-Spring-tags-tp4869840p4869840.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to