Hi,

I'm preparing to upgrade an application to 2.9.0 from 2.8.3 and found a
problem initializing one of our existing routes defined with the Java DSL:

from ("direct:outerRoute")
                .choice ()
                    .when(header("test-header").isNotNull())
                        .to("direct:mainProcess")
                    .otherwise ()
                        .to ("log:badMessage")
                        .transform ()
                                .method (rejectBean, "processRejectedMessage")
                 .end ();

I get a StackOverflowError initializing the route when using version 2.9.0
in the staging repo, but it works fine with version 2.8.3.  Here's a snippet
of the error below:

Exception in thread "SpringOsgiExtenderThread-27"
java.lang.StackOverflowError
        at java.lang.Integer.toHexString(Integer.java:174)
        at java.lang.Object.toString(Object.java:219)
        at
org.apache.camel.model.BeanDefinition.description(BeanDefinition.java:80)
        at 
org.apache.camel.model.BeanDefinition.toString(BeanDefinition.java:69)
        at java.lang.String.valueOf(String.java:2826)
        at java.lang.StringBuilder.append(StringBuilder.java:115)
        at java.util.AbstractCollection.toString(AbstractCollection.java:422)
        at java.lang.String.valueOf(String.java:2826)
        at java.lang.StringBuilder.append(StringBuilder.java:115)
        at
org.apache.camel.model.RouteDefinition.toString(RouteDefinition.java:116)
        at java.lang.String.valueOf(String.java:2826)
        at java.lang.StringBuilder.append(StringBuilder.java:115)
        at java.util.AbstractCollection.toString(AbstractCollection.java:422)
        at java.lang.String.valueOf(String.java:2826)
        at java.lang.StringBuilder.append(StringBuilder.java:115)
        at
org.apache.camel.model.RoutesDefinition.toString(RoutesDefinition.java:60)
        at org.apache.camel.builder.RouteBuilder.toString(RouteBuilder.java:58)
        at
org.apache.camel.language.bean.BeanExpression.toString(BeanExpression.java:68)
        at
org.apache.camel.model.language.ExpressionDefinition.toString(ExpressionDefinition.java:99)
        at java.lang.String.valueOf(String.java:2826)
        at java.lang.StringBuilder.append(StringBuilder.java:115)
        at
org.apache.camel.model.TransformDefinition.toString(TransformDefinition.java:44)
... etc ...

I can work around the problem by factoring the otherwise() portion into a
separate route:

from ("direct:handleBadMessage")
    .to ("log:badMessage")
    .transform ()
        .method (rejectBean, "processRejectedMessage");

from ("direct:outerRoute")
                .choice ()
                    .when(header("test-header").isNotNull())
                        .to("direct:mainProcess")
                    .otherwise ()
                        .to("direct:handleBadMessage")
                 .end ();

Thanks,
Jerry
 



--
View this message in context: 
http://camel.465427.n5.nabble.com/Camel-2-9-0-StackOverflowError-initializing-route-with-otherwise-clause-tp5110599p5110599.html
Sent from the Camel Development mailing list archive at Nabble.com.

Reply via email to