setHeader() should be able to take the XPath expression.
I just add unit test in the camel trunk to show it.

 setHeader("foo").xpath("/personFile/text()").  

--  
Willem Jiang

FuseSource
Web: http://www.fusesource.com (http://www.fusesource.com/)
Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) 
(English)
          http://jnn.javaeye.com (http://jnn.javaeye.com/) (Chinese)
Twitter: willemjiang  
Weibo: willemjiang





On Monday, August 27, 2012 at 6:53 PM, Joe San wrote:

> I managed to get that working.
>  
> I have another question on the route configuration:
>  
> Assuming the following xml snippet:
>  
> <pss:info>
> <personFile>098765432.txt</personFile>
> <address>
> <street>xyz</street>
> <city>Frankfurt</city>
> </address>
> <persons>
> <person>
> <name>joe</name>
> <age>32</age>
> <country>Germany</country>
> </person>
>  
> <person>
> <name>sam</name>
> <age>32</age>
> <country>Germany</country>
> </person>
> </persons>
> </pss:info>
>  
> The task was to get the List of Person which I managed to extract using
> xpath. I would also want to get the fileName value and set that as a header
> in my Exchange. My route definition is as below:
>  
> from("file://C:/folders/inbox?noop=true")
>  
> .setFileNameHeader(ns.xpath("/SOAP:Envelope/SOAP:Body/pss:info/personFile/text()"))
> .split(ns.xpath("//SOAP:Envelope/SOAP:Body/pss:info/persons"))
> .bean(new PersonProcessor())
> .to("file://C:/folders/inbox");
>  
> But I get the following error message shown:
>  
> The method setFileNameHeader(XPathExpression) is undefined for the type
> RouteDefinition
>  
> The setHeader also seems to be wrong.
>  
> Regards,
> Jothi
>  
> On Fri, Aug 24, 2012 at 9:35 PM, Christian Müller <
> christian.muel...@gmail.com (mailto:christian.muel...@gmail.com)> wrote:
>  
> > Yes, should be possible.
> >  
> > Sent from a mobile device
> > Am 24.08.2012 13:56 schrieb "Joe San" <codeintheo...@gmail.com 
> > (mailto:codeintheo...@gmail.com)>:
> >  
> > > The most common language to use is XPath, which allows you to evaluate
> > > XPath
> > > expressions on the message body. For example, suppose the message
> >  
> >  
> > contains
> > > the following
> > > XML document:
> > >  
> > > <order customerId="123">
> > > <status>in progress</status>
> > > </order>
> > >  
> > > By using XPath expressions, you can extract parts of the document and
> > bind
> > > them to
> > > parameters, like this:
> > >  
> > > public void updateStatus(@XPath("/order/@customerId") Integer customerId,
> > > @XPath("/order/status/text()") String status) {
> > > ....
> > > ....
> > > }
> > >  
> > > The above snippet is from the Camel in Action book. Can I use the @XPath
> > to
> > > evaluate to a List < Person >?
> > >  
> > > My xml would look like this:
> > >  
> > > <info>
> > > <address>
> > > <street>xyz</street>
> > > <city>Frankfurt</city>
> > > </address>
> > >  
> > > <person>
> > > <name>joe</name>
> > > <age>32</age>
> > > <country>Germany</country>
> > > </person>
> > >  
> > > <person>
> > > <name>sam</name>
> > > <age>32</age>
> > > <country>Germany</country>
> > > </person>
> > >  
> > > </info>
> > >  
> > > The XPath should evaluate the fetch the List of Person objects!
> > >  
> > > Regards,
> > > Jothi
> >  
>  



Reply via email to