Hi You can use a POJO to set the header using xpath. The xpath builder was designed to work on the message body.
I wonder if your use case is widespread used, so its okay to alter the code to support the use case? On Fri, May 20, 2011 at 11:23 AM, tobeand <[email protected]> wrote: > I guess the XPath language of Camel has one limitation. That is the > body of input message must be a valid XML or null. > > In this problem, user want use XPath to process a xml in message > header, but the message body is a plain text (not valid XML), and an > exception occurs in parsing the content to DOM. > > After reading source code, we found that the > XPathBuilder.doInEvaluateAs() method try to extract the document from > the input message, and pass the document to XPathExpression.evaluate() > method. The XPathBuilder.getDocument() method creates an InputSource > for the text body and then the XPathExpression.evaluate() method > creates a DocumentBuilder to parse the InputSource. > > > > On Fri, May 20, 2011 at 2:24 PM, Taariq Levack <[email protected]> wrote: >> Also if null or an empty xml is valid in some situations, then a content >> based router in front of this should do niely. >> >> On Fri, May 20, 2011 at 8:18 AM, Taariq Levack <[email protected]> wrote: >> >>> Have you looked at the Validation component? >>> http://camel.apache.org/validation.html >>> >>> >>> On Fri, May 20, 2011 at 7:10 AM, ext2 <[email protected]> wrote: >>> >>>> Using camel's in:header() xpath function, we can deal with xml stored in >>>> message header very easy; for example: >>>> <setHeader name="cheaperBooks"> >>>> >>>> <xpath>in:header('bookstore')/child::book[price<100]</xpath> >>>> </setHeader> >>>> >>>> The setHeader could retrieve all cheaper books(price less than 100) from a >>>> bookstore xml (which already stored in message header('bookstore') >>>> >>>> But in camel, things are not always so easy. The user must make sure input >>>> message's body must be a valid XML or null(although the body's content may >>>> have nothing to do with the bookstore xml). Otherwise the above xapth >>>> express will failed; >>>> >>>> Suggestion(Maybe): >>>> >>>> Camel's XPath expression should check if the input body's content could be >>>> convert to xml. If the body cannot, then using a null instead of original >>>> message body to do XPathExpression.evaluate; >>>> >>>> >>>> >>> >> > -- Claus Ibsen ----------------- FuseSource Email: [email protected] Web: http://fusesource.com CamelOne 2011: http://fusesource.com/camelone2011/ Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/
