Quantcast

Dynamic Routing

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Dynamic Routing

m.jimen.blazquez
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Dynamic Routing

suman
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Dynamic Routing

suman
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

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Dynamic Routing

m.jimen.blazquez
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

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Dynamic Routing

Claus Ibsen-2
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/
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Dynamic Routing

m.jimen.blazquez
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Dynamic Routing

Claus Ibsen-2
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/
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Dynamic Routing

Claus Ibsen-2
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/
Loading...