我是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.
这是新的开发,所以除了优秀的设计之外我没有很多限制。我愿意接受需要改变路线的建议。另外,如果我正在做一些不是惯用的事情,我很乐意用任何建议的改进来修改这个问题。
答案 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部分之外的所有路由。我认为这暂时已经足够了。