I am trying to unit test a route that uses bean to dynamically construct an
sftp endpoint. This works when I run my route in a normal context, as it
seems a template is already in the registry and can be correctly injected.
My problem is when trying to construct the unit test I seem to be running
into a condition where the ProducerTemplate is still null when
createJndiContext is invoked and that results in an NPE in my bean that need
to call a method on the template.
Any help would be greatly appreciated.
Here is a simplified unit test that illustrates this:
public class BeanWithProdTemplateDependencyTest
extends CamelTestSupport
{
private static final Logger log =
LoggerFactory.getLogger(BeanWithProdTemplateDependencyTest.class);
private static final String FROM = "direct:start";
@EndpointInject(uri = "mock:result")
protected MockEndpoint resultEndpoint;
@Before
public void setUp() throws Exception {
super.setUp();
context.getRouteDefinition("my-cool-route").adviceWith(context, new
AdviceWithRouteBuilder()
{
@Override
public void configure()
throws Exception
{
replaceFromWith(FROM);
}
});
startCamelContext();
}
@Test
public void test()
{
template.sendBody(FROM, "cheese");
}
@Override
public boolean isUseAdviceWith()
{
return true;
}
@Override
protected Context createJndiContext()
throws Exception
{
JndiContext context = new JndiContext();
MyBean myBean = new MyBean(template);
context.bind("myBean", myBean);
return context;
}
@Override
protected RouteBuilder createRouteBuilder()
throws Exception
{
return new RouteBuilder()
{
@Override
public void configure()
throws Exception
{
from("jms:queue:inbox")
.routeId("my-cool-route")
.beanRef("myBean", "doStuff")
.log("Body: $body}")
.to("mock:result");
}
};
}
public class MyBean {
private final ProducerTemplate producerTemplate;
public MyBean(ProducerTemplate template)
{
this.producerTemplate = template;
}
public void doStuff() throws Exception{
// NPE here, template is null
this.producerTemplate.sendBody("seda:foo", "beer");
}
}
}
--
View this message in context:
http://camel.465427.n5.nabble.com/ProducerTemplate-null-when-used-to-construct-bean-in-new-JndiContext-in-a-unit-test-tp5756543.html
Sent from the Camel - Users mailing list archive at Nabble.com.