package org.jooby.camel;
import static java.util.Objects.requireNonNull;
import static org.junit.Assert.assertEquals;
import javax.inject.Inject;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.jooby.test.ServerFeature;
import org.junit.Test;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigValueFactory;
public class CamelWithInjectableRoutesFeature extends ServerFeature {
public static class Railway extends RouteBuilder {
private Printer printer;
@Inject
public Railway(final Printer printer) {
this.printer = requireNonNull(printer, "A printer is required.");
}
@Override
public void configure() throws Exception {
from("direct:di").transform().simple("Hi ${you}!").process(printer);
}
}
public static class Printer implements Processor {
@Override
public void process(final Exchange exchange) throws Exception {
String message = exchange.getIn().getBody(String.class);
assertEquals("Hi Camel!", message);
}
}
{
use(ConfigFactory.empty()
.withValue("you", ConfigValueFactory.fromAnyRef("Camel")));
use(new Camel().routes(Railway.class));
get("/di", req -> {
req.require(ProducerTemplate.class).sendBody("direct:di", "...");
return req.path();
});
}
@Test
public void di() throws Exception {
request()
.get("/di")
.expect("/di");
}
}