Terral Guillaume created CAMEL-8798:
---------------------------------------

             Summary: weaveAddLast throwing UnsupportedOperation when route 
have a ChoiceDefinition
                 Key: CAMEL-8798
                 URL: https://issues.apache.org/jira/browse/CAMEL-8798
             Project: Camel
          Issue Type: Bug
          Components: camel-core
    Affects Versions: 2.15.2, 2.15.1, 2.15.0, 2.14.2
         Environment: JDK 7.0 64bits
            Reporter: Terral Guillaume


I'm currently upgrading from Camel 2.14.1 to 2.15.2, after the upgrade some of 
my test are failing. 

My route is: 
        
{code}from("file:input?idempotent=true&moveFailed=.error").routeId("MyRoute")
        .choice()
             .when(body().isEqualTo("body1"))
                 .log("body1")
             .otherwise()
                .log("notBody1")
       .end()
 {code}
My test contains : 
 
        
{code}camelContext.getRouteDefinition("MyRoute").adviceWith(camelContext, new 
AdviceWithRouteBuilder() {
            @Override
            public void configure() {
                weaveAddLast().to(mockOutput);
            }
        });
{code}
The weaveAddLast is failing with the following stackTrace: 
{code}
java.lang.UnsupportedOperationException 
        at java.util.AbstractList.add(AbstractList.java:148) 
        at 
org.apache.camel.builder.AdviceWithTasks$4.task(AdviceWithTasks.java:298) 
        at 
org.apache.camel.model.RouteDefinition.adviceWith(RouteDefinition.java:270) 
{code}
After some debug I found that when my route and with a Choice I cannot 
weaveAddLast the route. 
When the AdviceWithTasks task method try to add the outputs (here) the 
implementation of the list return by the ChoiceDefinition class does not 
implements the method add(int,Object) then we have the UnsupportedOperation 

The difference between 2.14.1 and 2.15.2 is that in the AdviceWithTasks the 
outputs list where the weaveAddLast try to find the last Processor to add the 
outputs is not a list returned by ChoiceDefinition but it's a list with the 
Logs processor. 

This difference is there because now in 2.15.2 the method that is going through 
the route to retrieve the outputs nodes have a maximum depth which is computed 
here  

When my route have finish with a ChoiceDefinition the maximum depth computed is 
only 1 then I cannot have my logs in outputs an the weaveAddLast have in his 
list only the ChoiceDefinition. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to