Details
-
Type:
Bug
-
Status: Resolved
-
Priority:
Major
-
Resolution: Invalid
-
Affects Version/s: 2.15.0
-
Component/s: camel-core
-
Labels:None
-
Estimated Complexity:Unknown
Description
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:
Exception in thread "main" java.lang.IllegalArgumentException: There are no outputs which matches: * in the route: Route(main)[[From[direct:main]] -> [Intercept[[Log[Intercept ${body} ${headers}]]], 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:20)
Simple test to illustrate the issue:
import org.apache.camel.builder.AdviceWithRouteBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.model.ModelCamelContext;
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().log("Intercept ${body} ${headers}");
context.addRoutes(route);
context.getRouteDefinition("main").adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
weaveAddFirst().to("direct:advice");
}
});
}
}