Apache Camel-类型转换期间的错误或误解

时间:2019-08-11 13:21:25

标签: apache-camel spring-camel

当我的身体是一个整数列表时,我尝试将其作为整数获取,我得到了我期望为空的第一个列表元素,实际上我只有在测试时为空

from("timer:foo?repeatCount=1")
            .setBody(constant(Arrays.asList(1, 2)))
            .process(e -> System.out.println(e.getIn().getBody(Integer.class)))
            .process(e -> System.out.println(e.getIn().getBody(int.class)));

这将打印1,但是如果我将from改成直接写并进行单元测试,我将得到null,则不知道这是否是预期的行为,因为在某些情况下会导致数据丢失。

(我将骆驼靴与弹簧靴一起使用)

这是我的测试路线的样子

public class DemoRouteTest extends CamelTestSupport {

@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
    return new DemoRoute();
}

}

2 个答案:

答案 0 :(得分:0)

当您强制转换为int而不是int[]时,响应始终为null。我对代码进行了一些调整以证明这一点。尝试在您的计算机上也运行此代码段:

from("timer:foo?repeatCount=1")
    .setBody(constant(Arrays.asList(1, 2)))
    .process(e -> {
        System.out.println("Raw body: "+e.getIn().getBody());
        System.out.println("Cast to int[]:");
        int[]body=e.getIn().getBody(int[].class);
        for(int x:body){
            System.out.println(x);
        }
        System.out.println("Cast to int: "+e.getIn().getBody(int.class));
    });

您将看到以下结果:

Raw body: [1, 2]
Cast to int[]:
1
2
Cast to int: null   

答案 1 :(得分:0)

我终于看到了此日志行Overriding type converter from: StaticMethodTypeConverter: public static java.lang.Integer org.apache.camel.converter.ObjectConverter.toInteger(java.lang.Object) to: org.apache.camel.spring.boot.SpringTypeConverter@619b0c7b,因此,当骆驼无法转换时,它仅会在使用Spring Boot框架时使用SpringTypeConverter代替