我写了这条骆驼路线:
@Component
public class FirstRoute extends RouteBuilder {
private static final String DIRECT_ENDPOINT = "direct:test_direct";
private static final String HTTP_ENDPOINT = "http:test_http";
@Autowired
private URIProcessor uriProcessor;
@Override
public void configure() throws Exception {
restConfiguration().component("servlet").bindingMode(RestBindingMode.json);
rest("/doTest/").post("/{comp}").to(DIRECT_ENDPOINT);
test();
}
public void test() {
from(DIRECT_ENDPOINT).routeId("route_rest")
.marshal().json(JsonLibrary.Jackson)
.process(uriProcessor)
.to(HTTP_ENDPOINT).unmarshal().json(JsonLibrary.Jackson, TestDto.class);
}
}
效果很好。
我想为这条路线编写一个测试类,所以在测试类中我写道:
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new FirstRoute();
但是当我运行测试时出现错误。
这是错误日志:
org.apache.camel.FailedToCreateRouteException: Failed to create route route_rest at: >>> process[Processor@0x0] <<< in route: Route(route_rest)[[From[direct:testEsenzioneReddito]] -> [Ma... because of ref must be specified on: process[Processor@0x0]
...
Caused by: java.lang.IllegalArgumentException: ref must be specified on: process[Processor@0x0]
... 42 more
我不知道这可能是什么,有人有什么建议吗? 谢谢你
更改您的类以接受 URIProcessor uriProcessor 作为构造函数参数,例如:
@Component
public class FirstRoute extends RouteBuilder {
private static final String DIRECT_ENDPOINT = "direct:test_direct";
private static final String HTTP_ENDPOINT = "http:test_http";
private final URIProcessor uriProcessor;
public FirstRoute(URIProcessor uriProcessor){
this.uriProcessor = uriProcessor;
}
@Override
public void configure() throws Exception {
...
}
然后将处理器传递给您的测试实例
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
uriProcessor = //create or get uriProcessor
return new FirstRoute(uriProcessor);
}
或者,如果您可以在测试中使用 Spring 上下文 - 不要创建方法 createRouteBuilder() 进行测试 - 只需 make
@Autowired
private FirstRoute forstRoute;
在你的测试中