Ok great. 

>From this I've now realised that what I really want to do is grab a bunch of
stuff from the incoming xml and store it as properties on the message for
future use in the route and then I don't really need the original xml
anymore.

Now I could write some code like this:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true); // never forget this!
    DocumentBuilder builder = domFactory.newDocumentBuilder();
    Document doc = builder.parse(theIncomingXML);

    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    XPathExpression expr 
     = xpath.compile("//book[author='Neal Stephenson']/title/text()");

    Object result = expr.evaluate(doc, XPathConstants.NODESET);
 
and store the result objects as properties on the message. 

Is there an "easier" way to do this with Camel? If I am in a class that
implements Processor, in the process method, can I access the xpath "helper"
stuff that camel provides so that I can just (almost) say

String interestingText = message.xpath("//book[author='Neal
Stephenson']/title/text()") 

and it'll handle the parsing etc for me?






James.Strachan wrote:
> 
> 2009/10/23 Paul Phillips <[email protected]>:
>>
>> Hi there
>>
>> bit of a beginner question here.
>>
>> I have a situation where I want to
>>
>> - get some xml from a jms queue
>> - send an id contained in the xml to a custom component i have written
>> (the
>> body of the request should be a string that looks like this: "ID=blah",
>> so I
>> use a bean to grab the id using xpath and change the body of the
>> exchange)
>> - this will return a message with a body that looks like "MATCHED=TRUE"
>> or
>> something
>> - if MATCHED=TRUE then I want to send some xml to a different endpoint.
> 
> BTW you can do the above like this...
> 
> public class MyBean {
> 
>   @Consume(uri="activemq:SomeQueue")
>   pubilc void onXml(@XPath("/foo/ID") String myID, Document restOfBody) {
>     // return the transformed payload
>     return "MATCHED=TRUE"
>   }
> }
> 
> Notice Camel can do the XPath for you and inject the ID parameter to
> your transformer method (myID) - also notice the lack of any
> middleware APIs etc.
> 
> for more details see
> http://camel.apache.org/pojo-consuming.html
> 
> -- 
> James
> -------
> http://macstrac.blogspot.com/
> 
> Open Source Integration
> http://fusesource.com/
> 
> 

-- 
View this message in context: 
http://www.nabble.com/beginner-question-tp26029591p26095101.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to