Camel 测试 - 无法创建路由...因为必须在进程上指定 ref

问题描述 投票:0回答:1

我写了这条骆驼路线:

@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


我不知道这可能是什么,有人有什么建议吗? 谢谢你

java apache-camel spring-camel
1个回答
0
投票

更改您的类以接受 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;

在你的测试中

© www.soinside.com 2019 - 2024. All rights reserved.