You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Claus Ibsen <cl...@gmail.com> on 2012/02/01 09:20:24 UTC
Re: Passing parameter values to bean methods via spring
Hi
On Tue, Jan 31, 2012 at 5:10 PM, Gershaw, Geoffrey
<ge...@credit-suisse.com> wrote:
> Hello,
>
>
>
> I am a newbie to Camel. I've read a bunch of docs, but have not found an
> answer to this specific use case.
>
Welcome to the community.
>
>
> 1. Assume the following.
>
> a. I have the belown XML msg in the body of my Message.
>
> <Example>
>
> <User>joe</User>
>
> </Example>
>
> b. I am using a bean as a Filter. The method signature is
>
> i.
> public boolean validateUser(String user)
>
> c. Ideally I would like to user xpath in the config file to pass
> "Joe" to the validateUser method
>
Yes xpath works fine for grabbing content from a XML doc.
However where it get tricky is if your XML uses namespaces. If so
your XPath expression *must* also use namespaces.
> d. If the method returns false, I would like the route to stop.
> Don't know how to do this.
>
You can use a Content Based Router, and in the otherwise leg, you can
use the stop DSL.
> e. If the method returns true, I would like to pass the original
> XML msg to a processor and finish the route.
>
Yes this happens already, the filter predicate is just for determine
true | false
> f. Is this possible?
>
>
Yes, something a like
from X
choice
when bean (myFilterBean)
to Y
otherwise
stop
>
>
>
> Thanks
>
> Geoff Gershaw
>
>
> ===============================================================================
> Please access the attached hyperlink for an important electronic communications disclaimer:
> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
> ===============================================================================
>
--
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/
Re: Passing parameter values to bean methods via spring
Posted by Claus Ibsen <cl...@gmail.com>.
You have to use the @XPath annotation in the bean.
There is a JIRA ticket to allow from the DSL to use multiple
expressions to define the parameter binding, but this is not yet
implemented.
So you can do something alike
<bean ref="xmlFilter" method="match">
<xpath>/Example/user</xpath>
<header>foo</header>
</bean>
But again, this has not been implemented.
On Wed, Feb 1, 2012 at 10:06 PM, Gershaw, Geoffrey
<ge...@credit-suisse.com> wrote:
> Thanks Claus,
>
> I was trying to keep out the Camel annotations. I wanted to have all the config/routes in Spring. My example route is:
>
>> <route>
>> <from>"ftp://rider.com/orders?username=rider&password=secret"</from>
>> <filter>
>> <simple>${bean:xmlFilter?method=match}</simple>
>> <to uri="log:worked"/>
>> </filter>
>> </route>
>
> How can I use XPath to pass the user to xmlFilter.match() in the below?
>
> <simple>${bean:xmlFilter?method=match}</simple>
>
> Thanks
> -----Original Message-----
> From: Claus Ibsen [mailto:claus.ibsen@gmail.com]
> Sent: Wednesday, February 01, 2012 9:26 AM
> To: users@camel.apache.org
> Subject: Re: Passing parameter values to bean methods via spring
>
> Hi
>
> You can use the Camel @Xpath annotation on a 2nd parameter in that
> method signature
>
> public boolean match(String username, @XPath("/Example/User") String user) {
>
> You may have to fiddle a bit to get the xpath expression working.
> Also sometimes you may have to use /text() to tell it to return the
> text content of the xml node.
>
>
>
> On Wed, Feb 1, 2012 at 3:05 PM, Gershaw, Geoffrey
> <ge...@credit-suisse.com> wrote:
>> Thanks for the reply. Could you give me an example for 1c? I mocked up an example. Assume the below XML comes from the ftp site. The XMLFilter's match method accepts the username. How can I use XPath to pass the user to the match method?
>>
>>
>> <Example>
>>
>> <User>joe</User>
>>
>> </Example>
>>
>> Class XMLFilter{
>>
>> public boolean match(String username){
>> //check db for user
>> //if found return true/else false
>> }
>> }
>>
>> <route>
>> <from>"ftp://rider.com/orders?username=rider&password=secret"</from>
>> <filter>
>> <simple>${bean:xmlFilter?method=match}</simple>
>> <to uri="log:worked"/>
>> </filter>
>> </route>
>>
>> Thanks
>>
>> -----Original Message-----
>> From: Claus Ibsen [mailto:claus.ibsen@gmail.com]
>> Sent: Wednesday, February 01, 2012 3:20 AM
>> To: users@camel.apache.org
>> Subject: Re: Passing parameter values to bean methods via spring
>>
>> Hi
>>
>> On Tue, Jan 31, 2012 at 5:10 PM, Gershaw, Geoffrey
>> <ge...@credit-suisse.com> wrote:
>>> Hello,
>>>
>>>
>>>
>>> I am a newbie to Camel. I've read a bunch of docs, but have not found an
>>> answer to this specific use case.
>>>
>>
>> Welcome to the community.
>>
>>>
>>>
>>> 1. Assume the following.
>>>
>>> a. I have the belown XML msg in the body of my Message.
>>>
>>> <Example>
>>>
>>> <User>joe</User>
>>>
>>> </Example>
>>>
>>> b. I am using a bean as a Filter. The method signature is
>>>
>>> i.
>>> public boolean validateUser(String user)
>>>
>>> c. Ideally I would like to user xpath in the config file to pass
>>> "Joe" to the validateUser method
>>>
>>
>> Yes xpath works fine for grabbing content from a XML doc.
>> However where it get tricky is if your XML uses namespaces. If so
>> your XPath expression *must* also use namespaces.
>>
>>
>>> d. If the method returns false, I would like the route to stop.
>>> Don't know how to do this.
>>>
>>
>> You can use a Content Based Router, and in the otherwise leg, you can
>> use the stop DSL.
>>
>>
>>> e. If the method returns true, I would like to pass the original
>>> XML msg to a processor and finish the route.
>>>
>>
>> Yes this happens already, the filter predicate is just for determine
>> true | false
>>
>>> f. Is this possible?
>>>
>>>
>>
>> Yes, something a like
>>
>> from X
>> choice
>> when bean (myFilterBean)
>> to Y
>> otherwise
>> stop
>>
>>
>>
>>>
>>>
>>>
>>> Thanks
>>>
>>> Geoff Gershaw
>>>
>>>
>>> ===============================================================================
>>> Please access the attached hyperlink for an important electronic communications disclaimer:
>>> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
>>> ===============================================================================
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> FuseSource
>> Email: cibsen@fusesource.com
>> Web: http://fusesource.com
>> Twitter: davsclaus, fusenews
>> Blog: http://davsclaus.blogspot.com/
>> Author of Camel in Action: http://www.manning.com/ibsen/
>>
>> ===============================================================================
>> Please access the attached hyperlink for an important electronic communications disclaimer:
>> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
>> ===============================================================================
>>
>
>
>
> --
> Claus Ibsen
> -----------------
> FuseSource
> Email: cibsen@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>
> ===============================================================================
> Please access the attached hyperlink for an important electronic communications disclaimer:
> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
> ===============================================================================
>
--
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/
RE: Passing parameter values to bean methods via spring
Posted by "Gershaw, Geoffrey" <ge...@credit-suisse.com>.
Thanks Claus,
I was trying to keep out the Camel annotations. I wanted to have all the config/routes in Spring. My example route is:
> <route>
> <from>"ftp://rider.com/orders?username=rider&password=secret"</from>
> <filter>
> <simple>${bean:xmlFilter?method=match}</simple>
> <to uri="log:worked"/>
> </filter>
> </route>
How can I use XPath to pass the user to xmlFilter.match() in the below?
<simple>${bean:xmlFilter?method=match}</simple>
Thanks
-----Original Message-----
From: Claus Ibsen [mailto:claus.ibsen@gmail.com]
Sent: Wednesday, February 01, 2012 9:26 AM
To: users@camel.apache.org
Subject: Re: Passing parameter values to bean methods via spring
Hi
You can use the Camel @Xpath annotation on a 2nd parameter in that
method signature
public boolean match(String username, @XPath("/Example/User") String user) {
You may have to fiddle a bit to get the xpath expression working.
Also sometimes you may have to use /text() to tell it to return the
text content of the xml node.
On Wed, Feb 1, 2012 at 3:05 PM, Gershaw, Geoffrey
<ge...@credit-suisse.com> wrote:
> Thanks for the reply. Could you give me an example for 1c? I mocked up an example. Assume the below XML comes from the ftp site. The XMLFilter's match method accepts the username. How can I use XPath to pass the user to the match method?
>
>
> <Example>
>
> <User>joe</User>
>
> </Example>
>
> Class XMLFilter{
>
> public boolean match(String username){
> //check db for user
> //if found return true/else false
> }
> }
>
> <route>
> <from>"ftp://rider.com/orders?username=rider&password=secret"</from>
> <filter>
> <simple>${bean:xmlFilter?method=match}</simple>
> <to uri="log:worked"/>
> </filter>
> </route>
>
> Thanks
>
> -----Original Message-----
> From: Claus Ibsen [mailto:claus.ibsen@gmail.com]
> Sent: Wednesday, February 01, 2012 3:20 AM
> To: users@camel.apache.org
> Subject: Re: Passing parameter values to bean methods via spring
>
> Hi
>
> On Tue, Jan 31, 2012 at 5:10 PM, Gershaw, Geoffrey
> <ge...@credit-suisse.com> wrote:
>> Hello,
>>
>>
>>
>> I am a newbie to Camel. I've read a bunch of docs, but have not found an
>> answer to this specific use case.
>>
>
> Welcome to the community.
>
>>
>>
>> 1. Assume the following.
>>
>> a. I have the belown XML msg in the body of my Message.
>>
>> <Example>
>>
>> <User>joe</User>
>>
>> </Example>
>>
>> b. I am using a bean as a Filter. The method signature is
>>
>> i.
>> public boolean validateUser(String user)
>>
>> c. Ideally I would like to user xpath in the config file to pass
>> "Joe" to the validateUser method
>>
>
> Yes xpath works fine for grabbing content from a XML doc.
> However where it get tricky is if your XML uses namespaces. If so
> your XPath expression *must* also use namespaces.
>
>
>> d. If the method returns false, I would like the route to stop.
>> Don't know how to do this.
>>
>
> You can use a Content Based Router, and in the otherwise leg, you can
> use the stop DSL.
>
>
>> e. If the method returns true, I would like to pass the original
>> XML msg to a processor and finish the route.
>>
>
> Yes this happens already, the filter predicate is just for determine
> true | false
>
>> f. Is this possible?
>>
>>
>
> Yes, something a like
>
> from X
> choice
> when bean (myFilterBean)
> to Y
> otherwise
> stop
>
>
>
>>
>>
>>
>> Thanks
>>
>> Geoff Gershaw
>>
>>
>> ===============================================================================
>> Please access the attached hyperlink for an important electronic communications disclaimer:
>> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
>> ===============================================================================
>>
>
>
>
> --
> Claus Ibsen
> -----------------
> FuseSource
> Email: cibsen@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>
> ===============================================================================
> Please access the attached hyperlink for an important electronic communications disclaimer:
> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
> ===============================================================================
>
--
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/
===============================================================================
Please access the attached hyperlink for an important electronic communications disclaimer:
http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
===============================================================================
Re: Passing parameter values to bean methods via spring
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
You can use the Camel @Xpath annotation on a 2nd parameter in that
method signature
public boolean match(String username, @XPath("/Example/User") String user) {
You may have to fiddle a bit to get the xpath expression working.
Also sometimes you may have to use /text() to tell it to return the
text content of the xml node.
On Wed, Feb 1, 2012 at 3:05 PM, Gershaw, Geoffrey
<ge...@credit-suisse.com> wrote:
> Thanks for the reply. Could you give me an example for 1c? I mocked up an example. Assume the below XML comes from the ftp site. The XMLFilter's match method accepts the username. How can I use XPath to pass the user to the match method?
>
>
> <Example>
>
> <User>joe</User>
>
> </Example>
>
> Class XMLFilter{
>
> public boolean match(String username){
> //check db for user
> //if found return true/else false
> }
> }
>
> <route>
> <from>"ftp://rider.com/orders?username=rider&password=secret"</from>
> <filter>
> <simple>${bean:xmlFilter?method=match}</simple>
> <to uri="log:worked"/>
> </filter>
> </route>
>
> Thanks
>
> -----Original Message-----
> From: Claus Ibsen [mailto:claus.ibsen@gmail.com]
> Sent: Wednesday, February 01, 2012 3:20 AM
> To: users@camel.apache.org
> Subject: Re: Passing parameter values to bean methods via spring
>
> Hi
>
> On Tue, Jan 31, 2012 at 5:10 PM, Gershaw, Geoffrey
> <ge...@credit-suisse.com> wrote:
>> Hello,
>>
>>
>>
>> I am a newbie to Camel. I've read a bunch of docs, but have not found an
>> answer to this specific use case.
>>
>
> Welcome to the community.
>
>>
>>
>> 1. Assume the following.
>>
>> a. I have the belown XML msg in the body of my Message.
>>
>> <Example>
>>
>> <User>joe</User>
>>
>> </Example>
>>
>> b. I am using a bean as a Filter. The method signature is
>>
>> i.
>> public boolean validateUser(String user)
>>
>> c. Ideally I would like to user xpath in the config file to pass
>> "Joe" to the validateUser method
>>
>
> Yes xpath works fine for grabbing content from a XML doc.
> However where it get tricky is if your XML uses namespaces. If so
> your XPath expression *must* also use namespaces.
>
>
>> d. If the method returns false, I would like the route to stop.
>> Don't know how to do this.
>>
>
> You can use a Content Based Router, and in the otherwise leg, you can
> use the stop DSL.
>
>
>> e. If the method returns true, I would like to pass the original
>> XML msg to a processor and finish the route.
>>
>
> Yes this happens already, the filter predicate is just for determine
> true | false
>
>> f. Is this possible?
>>
>>
>
> Yes, something a like
>
> from X
> choice
> when bean (myFilterBean)
> to Y
> otherwise
> stop
>
>
>
>>
>>
>>
>> Thanks
>>
>> Geoff Gershaw
>>
>>
>> ===============================================================================
>> Please access the attached hyperlink for an important electronic communications disclaimer:
>> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
>> ===============================================================================
>>
>
>
>
> --
> Claus Ibsen
> -----------------
> FuseSource
> Email: cibsen@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>
> ===============================================================================
> Please access the attached hyperlink for an important electronic communications disclaimer:
> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
> ===============================================================================
>
--
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/
RE: Passing parameter values to bean methods via spring
Posted by "Gershaw, Geoffrey" <ge...@credit-suisse.com>.
Thanks for the reply. Could you give me an example for 1c? I mocked up an example. Assume the below XML comes from the ftp site. The XMLFilter's match method accepts the username. How can I use XPath to pass the user to the match method?
<Example>
<User>joe</User>
</Example>
Class XMLFilter{
public boolean match(String username){
//check db for user
//if found return true/else false
}
}
<route>
<from>"ftp://rider.com/orders?username=rider&password=secret"</from>
<filter>
<simple>${bean:xmlFilter?method=match}</simple>
<to uri="log:worked"/>
</filter>
</route>
Thanks
-----Original Message-----
From: Claus Ibsen [mailto:claus.ibsen@gmail.com]
Sent: Wednesday, February 01, 2012 3:20 AM
To: users@camel.apache.org
Subject: Re: Passing parameter values to bean methods via spring
Hi
On Tue, Jan 31, 2012 at 5:10 PM, Gershaw, Geoffrey
<ge...@credit-suisse.com> wrote:
> Hello,
>
>
>
> I am a newbie to Camel. I've read a bunch of docs, but have not found an
> answer to this specific use case.
>
Welcome to the community.
>
>
> 1. Assume the following.
>
> a. I have the belown XML msg in the body of my Message.
>
> <Example>
>
> <User>joe</User>
>
> </Example>
>
> b. I am using a bean as a Filter. The method signature is
>
> i.
> public boolean validateUser(String user)
>
> c. Ideally I would like to user xpath in the config file to pass
> "Joe" to the validateUser method
>
Yes xpath works fine for grabbing content from a XML doc.
However where it get tricky is if your XML uses namespaces. If so
your XPath expression *must* also use namespaces.
> d. If the method returns false, I would like the route to stop.
> Don't know how to do this.
>
You can use a Content Based Router, and in the otherwise leg, you can
use the stop DSL.
> e. If the method returns true, I would like to pass the original
> XML msg to a processor and finish the route.
>
Yes this happens already, the filter predicate is just for determine
true | false
> f. Is this possible?
>
>
Yes, something a like
from X
choice
when bean (myFilterBean)
to Y
otherwise
stop
>
>
>
> Thanks
>
> Geoff Gershaw
>
>
> ===============================================================================
> Please access the attached hyperlink for an important electronic communications disclaimer:
> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
> ===============================================================================
>
--
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/
===============================================================================
Please access the attached hyperlink for an important electronic communications disclaimer:
http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
===============================================================================