On Mon, May 23, 2011 at 5:39 AM, ext2 <[email protected]> wrote: > Hi, Claus: > Yes you are right. > The use case(header xml) isn't so widespread as the use-case( body xml) > > When we find the body is not xml(it's very easy to check), how about to give > the user another chance to deal with header using in:header function()? > > If so, we could extend the use-case for xpath expression, we could use it to > deal with not only body xml , but also header xml. (Even we can deal with > no-xml data, just like simple language does. (this is a side effect)) > > Anyway, this is just a suggestion. If you agree so, I could raise a issue > and give a simple patch for it; >
Well its just that if we do this, we open a new door. For example the xquery language should most likely also be changed. What would the proposed syntax change be for letting the in:header function operate, despite the message body is not valid xml? >> -----original ----- >>sender: Claus Ibsen [mailto:[email protected]] >> date: 2011/5/21 19:59 >> Receiver: [email protected] >> Subject: Re: an un-easy way to use camel-xpath in:header() function >> >> 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/ > > > -- 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/
