5

我是 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.

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

4

2 回答 2

7

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

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

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

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

于 2012-05-22T14:06:50.370 回答
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 部分。我觉得暂时够用了。

于 2012-05-22T19:12:28.707 回答