如何在apache camel中对servlet端点进行单元测试?

时间:2012-05-22 13:56:15

标签: java unit-testing tomcat junit apache-camel

我是Camel的新手,现在我的Tomcat服务器上运行了一条简单的路由。路线建立如下:

Processor generateWebResponse = new MySpecialProcessor();
from("servlet:///url?matchOnUriPrefix=true").process(generateWebResponse);

我尝试了这样一个简单的单元测试:

Exchange lAuthRequest = createExchangeWithBody("[json body!]");
template.send("servlet:///url", lAuthRequest);
assertEquals("baseline body", lAuthRequest.getOut().getBody());

但得到一个异常,表明我无法创建servlet端点。以下是异常消息:

org.apache.camel.FailedToCreateProducerException: Failed to create Producer for endpoint: Endpoint[servlet:///url]. Reason: java.lang.UnsupportedOperationException: You cannot create producer with servlet endpoint, please consider to use http or http4 endpoint.

这是新的开发,所以除了优秀的设计之外我没有很多限制。我愿意接受需要改变路线的建议。另外,如果我正在做一些不是惯用的事情,我很乐意用任何建议的改进来修改这个问题。

2 个答案:

答案 0 :(得分:7)

您需要使用http客户端组件向Tomcat发送消息,例如camel - http组件:http://camel.apache.org/http

然后,您需要知道Tomcat运行servlet的端口号,例如

template.send("http://localhost:8080/myapp/myserver", lAuthRequest);

您需要将camel-http添加到类路径中,例如,如果您使用maven,则将其添加为依赖项。

答案 1 :(得分:2)

我通过将路线分成两部分解决了我的问题。现在路线声明如下:

from("servlet:///auth?matchOnUriPrefix=true").inOut("direct:auth");
from("direct:auth").process(new AuthorizationProcessor());

测试看起来像这样:

Exchange lAuthRequest = createExchangeWithBody("test body");
template.send("direct:auth", lAuthRequest);
assertEquals("processed body", lAuthRequest.getOut().getBody());

这不是一个完整的测试,但允许我覆盖除传入的servlet部分之外的所有路由。我认为这暂时已经足够了。