[ 
https://issues.apache.org/jira/browse/CAMEL-8798?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-8798.
--------------------------------
    Resolution: Fixed

Thanks for reporting.

> 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.14.2, 2.15.0, 2.15.1, 2.15.2
>         Environment: JDK 7.0 64bits
>            Reporter: Terral Guillaume
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 2.16.0, 2.15.3, 2.14.4
>
>
> 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|https://github.com/apache/camel/blob/camel-2.15.2/camel-core/src/main/java/org/apache/camel/builder/AdviceWithTasks.java#L298])
>  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|https://github.com/apache/camel/blob/camel-2.15.2/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java#L221]
> 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