I've now got things working. This is what I did:

First of all, I decided to use Saxon instead of the XPath implementation
that is part of the JRE. I therefore added  the following dependency to my
POM:

*    <dependency>*
*      <groupId>org.apache.camel</groupId>*
*      <artifactId>camel-saxon</artifactId>*
*      <version>2.10.2</version>*
*    </dependency>*

I then used the following syntax in my route:

  *...choice().when(xpath("Xpath
expression").saxon()).log("match").otherwise().log("No match");*

In order to get this to work in Karaf 2.3.0 I executed the following
commands (in the Karaf console):

*install -s
mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xmlresolver/1.2_5
*
*install -s
mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.saxon/9.4.0.4_1
*

I then installed my bundle containing the Camel route and everything works.

So the problem was solved by using Saxon and in order to get Saxon to work
I needed the "xmlresolver" as well.

One other thing to note is how to use namespaces. The Camel documentation
says that you can do this:

*  Namespaces ns = new Namespaces("c", "http://acme.com/cheese";);*
*  ...xpath("/c:person[@name=''James]", ns)...*

That doesn't compile for me - has the API changed? The xpath() method does
not seem to allow a second argument of type Namespaces.

What I ended up doing was this:

*  Namespaces ns = new Namespaces("c", "http://acme.com/cheese";);*
*  ...choice().when(xpath("Xpath
expression").saxon().namespaces(ns)).log("match").otherwise().log("No
match");
*

That worked fine. Hope this post might help someone with similar problems.

/Bengt








2012/11/13 Bengt Rodehav <[email protected]>

> Will do.
>
>
> 2012/11/13 Claus Ibsen <[email protected]>
>
>> Hi Bengt
>>
>> Please keep us posted with your findings. There may be something we
>> need to fix / do / document to make this easier / work.
>>
>> On Tue, Nov 13, 2012 at 3:38 PM, Bengt Rodehav <[email protected]> wrote:
>> > OK - thanks for the hint,
>> >
>> > /Bengt
>> >
>> >
>> > 2012/11/13 Claus Ibsen <[email protected]>
>> >
>> >> On Tue, Nov 13, 2012 at 3:22 PM, Bengt Rodehav <[email protected]>
>> wrote:
>> >> > Thanks Claus.
>> >> >
>> >> > You don't happen to know anything about using Camel's xpath language
>> >> within
>> >> > Karaf? Should it be possible without resorting to Saxon? I couldn't
>> see
>> >> any
>> >> > osgi tests regarding this.
>> >> >
>> >>
>> >> Maybe try using the cxf.jre.properties from the 2.2.x Karaf releases,
>> >> or the one from SMX.
>> >> They have been prepared for XML stuff.
>> >>
>> >> Its usually something with those packages which should either be
>> >> exporter or not.
>> >>
>> >>
>> >> > /Bengt
>> >> >
>> >> >
>> >> > 2012/11/13 Claus Ibsen <[email protected]>
>> >> >
>> >> >> Though there is a SMX bundle as well
>> >> >>
>> >> >>
>> >>
>> http://repo2.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.saxon/9.4.0.4_1/
>> >> >>
>> >> >> The problem is that the SMX bundle doesn't contain all the files
>> that
>> >> >> the official JAR has. Its approx 9mb and the SMX bundle is much
>> >> >> smaller.
>> >> >>
>> >> >> Though don't know what may or may not work in OSGi land then due the
>> >> >> left out stuff.
>> >> >>
>> >> >>
>> >> >> On Tue, Nov 13, 2012 at 3:02 PM, Claus Ibsen <[email protected]
>> >
>> >> >> wrote:
>> >> >> > The JAR is in SMX repo at
>> >> >> > http://svn.apache.org/repos/asf/servicemix/m2-repo
>> >> >> >
>> >> >> > On Tue, Nov 13, 2012 at 2:39 PM, Bengt Rodehav <[email protected]
>> >
>> >> >> wrote:
>> >> >> >> I'm using Camel 2.10.2 on Karaf 2.3.0.
>> >> >> >>
>> >> >> >> I'm trying to use xpath but I get the following exception:
>> >> >> >>
>> >> >> >> *2012-11-13 13:20:38,307 | ERROR | rfaces/fundorder |
>> >> >> DefaultErrorHandler
>> >> >> >>            | rg.apache.camel.util.CamelLogger  215 | Failed
>> delivery
>> >> for
>> >> >> >> (MessageId: ID-IT-D-FQR815J-56524-1352809143728-0-1 on
>> ExchangeId:
>> >> >> >> ID-IT-D-FQR815J-56524-1352809143728-0-2). Exhausted after
>> delivery
>> >> >> attempt:
>> >> >> >> 1 caught: org.apache.camel.RuntimeExpressionException: Cannot
>> create
>> >> >> xpath
>> >> >> >> expression. Processed by failure processor:
>> >> >> >>
>> >> >>
>> >>
>> FatalFallbackErrorHandler[Channel[Wrap[se.digia.connect.service.fundorder.FundOrderService$NotificationProcessor@7a587427
>> >> >> ]
>> >> >> >> ->
>> >> >> >>
>> >> >>
>> >>
>> se.digia.connect.service.fundorder.FundOrderService$NotificationProcessor@7a587427
>> >> >> >> ]]*
>> >> >> >> *org.apache.camel.RuntimeExpressionException: Cannot create xpath
>> >> >> expression
>> >> >> >> *
>> >> >> >> * at
>> >> >> >>
>> >> >>
>> >>
>> org.apache.camel.builder.xml.XPathBuilder.evaluateAs(XPathBuilder.java:689)[114:org.apache.camel.camel-core:2.10.2]
>> >> >> >> *
>> >> >> >> *...*
>> >> >> >> * at java.lang.Thread.run(Thread.java:662)[:1.6.0_32]*
>> >> >> >> *Caused by: java.lang.RuntimeException:
>> XPathFactory#newInstance()
>> >> >> failed
>> >> >> >> to create an XPathFactory for the default object model:
>> >> >> >> http://java.sun.com/jaxp/xpath/dom with the
>> >> >> >> XPathFactoryConfigurationException:
>> >> >> >> javax.xml.xpath.XPathFactoryConfigurationException: No
>> XPathFctory
>> >> >> >> implementation found for the object model:
>> >> >> >> http://java.sun.com/jaxp/xpath/dom*
>> >> >> >> * at javax.xml.xpath.XPathFactory.newInstance(Unknown
>> >> Source)[:2.1.0]*
>> >> >> >> * at
>> >> >> >>
>> >> >>
>> >>
>> org.apache.camel.builder.xml.XPathBuilder.initDefaultXPathFactory(XPathBuilder.java:1046)[114:org.apache.camel.camel-core:2.10.2]
>> >> >> >> *
>> >> >> >> * at
>> >> >> >>
>> >> >>
>> >>
>> org.apache.camel.builder.xml.XPathBuilder.getXPathFactory(XPathBuilder.java:424)[114:org.apache.camel.camel-core:2.10.2]
>> >> >> >> *
>> >> >> >> * at
>> >> >> >>
>> >> >>
>> >>
>> org.apache.camel.builder.xml.XPathBuilder.createXPathExpression(XPathBuilder.java:829)[114:org.apache.camel.camel-core:2.10.2]
>> >> >> >> *
>> >> >> >> * at
>> >> >> >>
>> >> >>
>> >>
>> org.apache.camel.builder.xml.XPathBuilder.evaluateAs(XPathBuilder.java:685)[114:org.apache.camel.camel-core:2.10.2]
>> >> >> >> *
>> >> >> >> * ... 44 more*
>> >> >> >>
>> >> >> >> I have also posted a question regarding this on the Karaf mailing
>> >> list
>> >> >> to
>> >> >> >> find out what xpath implementation should be used on Karaf (and
>> how).
>> >> >> >>
>> >> >> >> However, looking at the Camel documentation, it seems like I can
>> >> choose
>> >> >> to
>> >> >> >> use the Saxon implementation of xpath. So, I added camel-saxon
>> as a
>> >> >> >> dependency to my project.
>> >> >> >>
>> >> >> >> But, then I can't build because maven cannot find the artifact
>> >> >> >> net.sf.saxon/saxon9he/9.3.0.11. I've searched maven central and
>> it's
>> >> >> not
>> >> >> >> there. Do I have to configure any other repositories than maven
>> >> central?
>> >> >> >> *
>> >> >> >> *
>> >> >> >> */Bengt*
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > --
>> >> >> > Claus Ibsen
>> >> >> > -----------------
>> >> >> > Red Hat, Inc.
>> >> >> > FuseSource is now part of Red Hat
>> >> >> > Email: [email protected]
>> >> >> > Web: http://fusesource.com
>> >> >> > Twitter: davsclaus
>> >> >> > Blog: http://davsclaus.com
>> >> >> > Author of Camel in Action: http://www.manning.com/ibsen
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Claus Ibsen
>> >> >> -----------------
>> >> >> Red Hat, Inc.
>> >> >> FuseSource is now part of Red Hat
>> >> >> Email: [email protected]
>> >> >> Web: http://fusesource.com
>> >> >> Twitter: davsclaus
>> >> >> Blog: http://davsclaus.com
>> >> >> Author of Camel in Action: http://www.manning.com/ibsen
>> >> >>
>> >>
>> >>
>> >>
>> >> --
>> >> Claus Ibsen
>> >> -----------------
>> >> Red Hat, Inc.
>> >> FuseSource is now part of Red Hat
>> >> Email: [email protected]
>> >> Web: http://fusesource.com
>> >> Twitter: davsclaus
>> >> Blog: http://davsclaus.com
>> >> Author of Camel in Action: http://www.manning.com/ibsen
>> >>
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> Red Hat, Inc.
>> FuseSource is now part of Red Hat
>> Email: [email protected]
>> Web: http://fusesource.com
>> Twitter: davsclaus
>> Blog: http://davsclaus.com
>> Author of Camel in Action: http://www.manning.com/ibsen
>>
>
>

Reply via email to