package camelinaction; import java.util.ArrayList; import java.util.List; import org.apache.camel.RoutesBuilder; import org.apache.camel.builder.AdviceWithRouteBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.model.RouteDefinition; import org.apache.camel.model.ToDefinition; import org.apache.camel.test.junit4.CamelTestSupport; import org.junit.Test; import static org.apache.camel.util.toolbox.AggregationStrategies.flexible; public class WeaveByTypeSelectFirstTest extends CamelTestSupport { @Override public boolean isUseAdviceWith() { // remember to override this method and return true to tell Camel that we are using advice-with in the routes return true; } @Test public void testWeaveByTypeSelectFirst() throws Exception { RouteDefinition route = context.getRouteDefinition("quotes"); route.adviceWith(context, new AdviceWithRouteBuilder() { @Override public void configure() throws Exception { // find the send to and select the first which gets replaced weaveByType(ToDefinition.class).selectFirst().replace().to("mock:line"); } }); context.start(); getMockEndpoint("mock:line").expectedBodiesReceived("camel rules", "donkey is bad"); getMockEndpoint("mock:combined").expectedMessageCount(1); getMockEndpoint("mock:combined").message(0).body().isInstanceOf(List.class); template.sendBody("seda:quotes", "Camel Rules,Donkey is Bad"); assertMockEndpointsSatisfied(); } @Override protected RoutesBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { from("seda:quotes").routeId("quotes") .split(body(), flexible().accumulateInCollection(ArrayList.class)) .transform(simple("${body.toLowerCase()}")) .to("seda:line") .end() .to("mock:combined"); } }; } }