使用Spring DSL的Camel自定义@Converter问题

时间:2017-05-25 23:04:37

标签: apache-camel spring-dsl

我只想学习自定义转换器并遇到问题。任何帮助深表感谢。 Camel版本2.17和JBoss Fuse 6.3

@Converter
public class MyConvertor{

    public MyConvertor(){}

    @Converter
    public static String convertTo(Exchange exchange) {}

}

在My Spring DSL中

<convertBodyTo charset="UTF-8" id="_convertBodyTo1" type="com.x.convertor.MyConvertor"/>

在META-INF / services / org / apache / camel / TypeConverter

com.x.convertor.MyConvertor

错误讯息:

 org.apache.camel.InvalidPayloadException: No body available of type: com.x.convertor.MyConvertor but has value: GenericFile[output.txt] of type: org.apache.camel.component.file.GenericFile on: output.txt. Caused by: No type converter available to convert from type: 
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
Caused by: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: org.apache.camel.component.file.GenericFile to the required type: com.x.convertor.MyConvertor

1 个答案:

答案 0 :(得分:1)

有几个错误。 type属性应该是您的目标类型(转换后您想要的类型)。

<convertBodyTo charset="UTF-8" id="_convertBodyTo1" type="java.lang.String"/>

Camel可以自动执行此转换。如果您想自己编写转换器,请注意转换器方法应该具有预期的输入类型作为参数,而不是Exchange(可以是Camel 2.16以后的可选第二个参数)。
类应该是这样的:

@Converter
public class MyConvertor{

    public MyConvertor(){}

    @Converter
    public static String convertTo(GenericFile body, Exchange exchange) {
        // The exchange parameter is optional
    }

}

https://camel.apache.org/type-converter.html
如果您想阅读CSV文件的内容以将其转换为POJO,请使用Bindy组件。