I'm testing a camel round but when I have the route try to access a particular method in a bean it keeps saying that there is no such method found. Source:
public class CommunicatorTest
{
FakeMessageConverter converter;
CamelContext context;
ProducerTemplate template;
String producerEndpoint = "seda:messagesFound";
long test = 123456789;
static final Logger logger = Logger.getLogger(CommunicatorTest.class);
public CommunicatorTest()
{
}
@Before
public void setUp() throws Exception
{
converter = new FakeMessageConverter();
SimpleRegistry registry = new SimpleRegistry();
registry.put("converter", converter);
context = new DefaultCamelContext(registry);
template = context.createProducerTemplate();
context.addRoutes(new CommunicatorRoute());
logger.info("Done creating context");
context.start();
}
@After
public void tearDown() throws Exception
{
context.stop();
}
@Test
public void testExistanceOfBean()
{
Object lookup = context.getRegistry().lookup("converter");
assertTrue("Object not a MessageConverter", lookup instanceof FakeMessageConverter);
}
@Test
public void testRoute()
{
Message msg = new Message();
msg.setHeader(new MessageHeader());
msg.getHeader().setSourceId(test);
logger.info("Sending data");
template.sendBody(producerEndpoint, msg);
assertEquals("value not the same", test, converter.getSid());
logger.info("Done Sending");
}
private static class FakeMessageConverter
{
private long sid;
private boolean edited = false;
public FakeMessageConverter()
{
}
public void processMessage(Message msg)
{
sid = msg.getHeader().getSourceId();
edited = true;
logger.info("The sid"+sid);
}
/**
* @return the sid
*/
public long getSid()
{
return sid;
}
/**
* @param sid the sid to set
*/
public void setSid(long sid)
{
this.sid = sid;
}
}
}
The route is as follows:
public class CommunicatorRoute extends RouteBuilder
{
@Override
public void configure() throws Exception
{
from("seda:messagesFound").bean("converter", "processMessage");
}
}
The exception is as follows:
ERROR [org.apache.camel.component.seda.SedaConsumer] - Error processing exchange. Exchange[Message: net.package.Message@f593af]. Caused by: [org.apache.camel.component.bean.MethodNotFoundException - Method with name: processMessage not found on bean: converter. Exchange[Message: net.package.message.Message@f593af]]
org.apache.camel.component.bean.MethodNotFoundException: Method with name: processMessage not found on bean: converter. Exchange[Message: com.saic.jswe.common.cdif.message.Message@f593af]
I'm still fairly new to camel so if I'm making some really simple mistake please let me know.
You class is private static. It must be public static so Camel can access it.