|
Hello
I would like to implement a system that receives a series of calls with a variable number of arguments. I would like to dynamically create the route depending on the number of arguments received. Given the route: from (cxfrs: / exchange ...). beanRef ("orderServiceRest", "buy ($ {body [0]}, $ {body [1]}, $ {body [2]}), $..." .) to (direct: otherRoute) As the number of the received arguments is variable, I would like to create that part of the route dynamically with something like: public class RouteHelper{ public String slip (MessageContentsList body) { String route = ""; if (condition) { message = "beanRef (\" orderServiceRest \ ", \" buy (\ ""; for (int i = 0; i <body.size (); i + +) { route + route = "$ {body [" + i + "]},"; } route.substring route = (0, route.lastIndexOf (',')); route = route + "\ "))"; return route; / / returns "beanRef (" orderServiceRest ", " buy ($ {body [0]}, $ {body [1]}, $ {body [2]}) \ )" }else return null; } } <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <camel:from uri="cxfrs:/exchange..." /> <camel:dynamicRouter> <method ref="routeHelper" method="slip" /> </camel:dynamicRouter> <camel:to uri="vm:standardizeResponse" /> </route> </camelContext> But in execution I get this exception: WebApplicationException've Been Caught: No endpoint Could Be found for: beanRef ("orderServiceRest", please check your classpath contains the needed camel component jar. Is it possible to do what I am trying to implement? thank you very much kindest regards |
|
Hello,
As far as iam aware from this url, http://camel.apache.org/dynamic-router.html the return value from your method should be camel endpoint URI so that the dynamic router can route message to that endpoint. http://camel.apache.org/uris.html Also have a look at FAQ.Its quite good http://camel.apache.org/faq.html HTH |
|
In reply to this post by m.jimen.blazquez
Also if you want to use dynamic consumers/receivers in the URI,have a look at this
http://camel.apache.org/how-do-i-use-dynamic-uri-in-to.html |
|
Hi,
I have converted the route to an endpoint route: public String slip(MessageContentsList body){ String route = ""; if (condition){ message = "bean:orderServiceRest?method=buy("; for (int i = 0 ; i < body.size() ; i++){ route = route + "${body[" + i + "]},"; } route = route.substring(0, route.lastIndexOf(',')); route = route + "\")"; return route; // returns "bean:orderServiceRest?method=buy(${body[0]},${body[1]},${body[2]})" } but I obtain this error: WebApplicationException has been caught : Name must have both starting and ending parenthesis, was: buy(${body[0]} I have checked several times the parenthesis and they are ok. I have simulated a call with no arguments and it worked fine, but with several arguments it throws the exception. I am using the 2.9 release candidate of camel. I am missing something? Kindest regards |
|
Hi
You must have build the method wrong, in the for loop. Make sure its built correctly. I just added a test to trunk that works with 3 parameters http://svn.apache.org/viewvc?rev=1213597&view=rev On Mon, Dec 12, 2011 at 5:49 PM, m.jimen.blazquez <[hidden email]> wrote: > Hi, > > I have converted the route to an endpoint route: > > public String slip(MessageContentsList body){ > > String route = ""; > if (condition){ > message = "bean:orderServiceRest?method=buy("; > > for (int i = 0 ; i < body.size() ; i++){ > route = route + "${body[" + i + "]},"; > } > route = route.substring(0, route.lastIndexOf(',')); > route = route + "\")"; > return route; // returns > "bean:orderServiceRest?method=buy(${body[0]},${body[1]},${body[2]})" > } > > but I obtain this error: > > WebApplicationException has been caught : Name must have both starting and > ending parenthesis, was: buy(${body[0]} > > I have checked several times the parenthesis and they are ok. > > I have simulated a call with no arguments and it worked fine, but with > several arguments it throws the exception. > > I am using the 2.9 release candidate of camel. > > I am missing something? > > Kindest regards > > > > -- > View this message in context: http://camel.465427.n5.nabble.com/Dynamic-Routing-tp5068570p5068896.html > Sent from the Camel - Users mailing list archive at Nabble.com. -- Claus Ibsen ----------------- FuseSource Email: [hidden email] Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/ |
|
Hi,
I have reduced my code to the simplest code. This code goes perfectly: <route> <camel:from uri="cxfrs:/exchange2...." /> <camel:bean ref="orderServiceRest" method="buy('symbol', 'quantity', 'price')" /> </route> but this one goes wrong: <route> <camel:from uri="cxfrs:/exchange2...." /> <camel:dynamicRouter> <method ref="routeHelper" method="slip" /> </camel:dynamicRouter> </route> public class RouteHelper{ int i = 0; public String slip(MessageContentsList body){ if (i==0){ i ; return "bean:orderServiceRest?method=buy('symbol','quantity','price')"; } else return null; }} throwing the exception: WebApplicationException has been caught : Name must have both starting and ending parenthesis, was: buy('symbol' I have also tested this case: <route> <camel:from uri="cxfrs:/exchange2...." /> <camel:dynamicRouter> <method ref="routeHelper" method="slip" /> </camel:dynamicRouter> </route> public class RouteHelper{ int i = 0; public String slip(MessageContentsList body){ if (i==0){ i ; return "bean:orderServiceRest?method=buy('symbol')"; } else return null; }} and it goes perfectly. I don't know what I am doing wrong, but I would be very grateful I you could help me. Kindest regards |
|
Hi
I can reproduce the issue and have created a ticket https://issues.apache.org/jira/browse/CAMEL-4773 On Tue, Dec 13, 2011 at 10:45 AM, m.jimen.blazquez <[hidden email]> wrote: > Hi, > > I have reduced my code to the simplest code. > > This code goes perfectly: > > <route> > <camel:from uri="cxfrs:/exchange2...." /> > <camel:bean ref="orderServiceRest" method="buy('symbol', 'quantity', > 'price')" /> > </route> > > but this one goes wrong: > > <route> > <camel:from uri="cxfrs:/exchange2...." /> > <camel:dynamicRouter> > <method ref="routeHelper" method="slip" /> > </camel:dynamicRouter> > </route> > > public class RouteHelper{ > int i = 0; > public String slip(MessageContentsList body){ > if (i==0){ > i ; > return > "bean:orderServiceRest?method=buy('symbol','quantity','price')"; > } > else > return null; > }} > > throwing the exception: > > WebApplicationException has been caught : Name must have both starting and > ending parenthesis, was: buy('symbol' > > I have also tested this case: > > <route> > <camel:from uri="cxfrs:/exchange2...." /> > <camel:dynamicRouter> > <method ref="routeHelper" method="slip" /> > </camel:dynamicRouter> > </route> > > public class RouteHelper{ > int i = 0; > public String slip(MessageContentsList body){ > if (i==0){ > i ; > return "bean:orderServiceRest?method=buy('symbol')"; > } > else > return null; > }} > > and it goes perfectly. > > I don't know what I am doing wrong, but I would be very grateful I you could > help me. > > Kindest regards > > -- > View this message in context: http://camel.465427.n5.nabble.com/Dynamic-Routing-tp5068570p5070967.html > Sent from the Camel - Users mailing list archive at Nabble.com. -- Claus Ibsen ----------------- FuseSource Email: [hidden email] Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/ |
|
On Tue, Dec 13, 2011 at 11:48 AM, Claus Ibsen <[hidden email]> wrote:
> Hi > > I can reproduce the issue and have created a ticket > https://issues.apache.org/jira/browse/CAMEL-4773 > Fixed today, and will be part of the Camel 2.9.0 release. > > > On Tue, Dec 13, 2011 at 10:45 AM, m.jimen.blazquez > <[hidden email]> wrote: >> Hi, >> >> I have reduced my code to the simplest code. >> >> This code goes perfectly: >> >> <route> >> <camel:from uri="cxfrs:/exchange2...." /> >> <camel:bean ref="orderServiceRest" method="buy('symbol', 'quantity', >> 'price')" /> >> </route> >> >> but this one goes wrong: >> >> <route> >> <camel:from uri="cxfrs:/exchange2...." /> >> <camel:dynamicRouter> >> <method ref="routeHelper" method="slip" /> >> </camel:dynamicRouter> >> </route> >> >> public class RouteHelper{ >> int i = 0; >> public String slip(MessageContentsList body){ >> if (i==0){ >> i ; >> return >> "bean:orderServiceRest?method=buy('symbol','quantity','price')"; >> } >> else >> return null; >> }} >> >> throwing the exception: >> >> WebApplicationException has been caught : Name must have both starting and >> ending parenthesis, was: buy('symbol' >> >> I have also tested this case: >> >> <route> >> <camel:from uri="cxfrs:/exchange2...." /> >> <camel:dynamicRouter> >> <method ref="routeHelper" method="slip" /> >> </camel:dynamicRouter> >> </route> >> >> public class RouteHelper{ >> int i = 0; >> public String slip(MessageContentsList body){ >> if (i==0){ >> i ; >> return "bean:orderServiceRest?method=buy('symbol')"; >> } >> else >> return null; >> }} >> >> and it goes perfectly. >> >> I don't know what I am doing wrong, but I would be very grateful I you could >> help me. >> >> Kindest regards >> >> -- >> View this message in context: http://camel.465427.n5.nabble.com/Dynamic-Routing-tp5068570p5070967.html >> Sent from the Camel - Users mailing list archive at Nabble.com. > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: [hidden email] > Web: http://fusesource.com > Twitter: davsclaus, fusenews > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/ -- Claus Ibsen ----------------- FuseSource Email: [hidden email] Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/ |
| Powered by Nabble | Edit this page |
