Alex Savitsky created CAMEL-8646:
------------------------------------

             Summary: Camel doesn't allow intercept and advice on the same route
                 Key: CAMEL-8646
                 URL: https://issues.apache.org/jira/browse/CAMEL-8646
             Project: Camel
          Issue Type: Bug
          Components: camel-core
    Affects Versions: 2.15.0
            Reporter: Alex Savitsky


Let's assume we have a route, defined in a RouteBuilder. It allows us to define 
an interceptor that would be executed before every route step, via an 
intercept(Processor) call.

Routes can also have an advice attached to them, via 
RouteDefinition.adviceWith(AdviceWithRouteBuilder) call.

If these two methods of weaving custom processing into existing routes are 
combined, Camel throws an exception:

{noformat}
Exception in thread "main" java.lang.IllegalArgumentException: There are no 
outputs which matches: * in the route: Route(main)[[From[direct:main]] -> 
[Intercept[[process[Processor@0x4b416926]]], Log[Main ${body} ${headers}]]]
        at 
org.apache.camel.builder.AdviceWithTasks$3.task(AdviceWithTasks.java:257)
        at 
org.apache.camel.model.RouteDefinition.adviceWith(RouteDefinition.java:270)
        at camel.Test.main(Test.java:27)
{noformat}

Simple test to illustrate the issue:

{noformat}
public class Test {
        public static void main(String[] args) throws Exception {
                ModelCamelContext context = new DefaultCamelContext();
                RouteBuilder route = new RouteBuilder() {
                        @Override
                        public void configure() throws Exception {
                                from("direct:advice").log("Advice ${body} 
${headers}");
                                from("direct:main").routeId("main").log("Main 
${body} ${headers}");
                        }
                };
                route.intercept().process(new Processor() {
                        @Override
                        public void process(Exchange exchange) throws Exception 
{
                                System.out.println("Intercept " + exchange);
                        }
                });
                context.addRoutes(route);
                context.getRouteDefinition("main").adviceWith(context, new 
AdviceWithRouteBuilder() {
                        @Override
                        public void configure() throws Exception {
                                weaveAddFirst().to("direct:advice");
                        }
                });
                context.start();
                context.createProducerTemplate().sendBody("direct:main", 
"testBody");
                context.stop();
        }
}
{noformat}



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

Reply via email to