キャメルラウンドをテストしていますが、ルートが Bean の特定のメソッドにアクセスしようとすると、そのようなメソッドが見つからないと言い続けます。ソース:
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;
}
}
}
ルートは次のとおりです。
public class CommunicatorRoute extends RouteBuilder
{
@Override
public void configure() throws Exception
{
from("seda:messagesFound").bean("converter", "processMessage");
}
}
例外は次のとおりです。
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: 名前のメソッド: processMessage が bean: コンバーターに見つかりません。交換[メッセージ: com.saic.jswe.common.cdif.message.Message@f593af]
私はまだキャメルにかなり慣れていないので、本当に単純な間違いを犯している場合はお知らせください.