使用 beanio 和 camel 解组固定长度的 utf-8 字符串

unmarshalling fixedlength utf-8 strings with beanio and camel

当没有用两个字节表示的变音符号时,消息的解组是可以的,否则会报错长度失败。我尝试将正文转换为字符串类型并设置字符集 utf-8

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

在 Camel 路由中使用 BeanIO 解组之前,但这没有帮助。解决问题的正确方法是什么?

事实上,我认为 convertBodyTo 的目的可能不是告诉某些应该进行解组的 class 实际字符串虽然声明为固定长度,但可能是可变长度,但要进行实际转换?但这需要我首先告诉某个地方实际源是 utf-8,可能来自端点。然后我可以在解组之前将它临时转换为一些具有单字节字符集表示的字符集,然后再转换回 utf-8?

在有人建议要点是为 BeanIO 提供使用哪个字符集的信息后,我想到了:

<dataFormats>
 <beanio id="parseTransactions464" mapping="mapping.xml" streamName="Transactions464" encoding="UTF-8"/>
</dataFormats>

但这给了我:

投递尝试后耗尽:1 次捕获:java.lang.NullPointerException:字符集

基本上是从这里复制encoding with beanio dataFormat的用法,不知道行不行:

这是 camel-beanio 中的缺陷,请参阅:

http://camel.465427.n5.nabble.com/Re-Exhausted-after-delivery-attempt-1-caught-java-lang-NullPointerException-charset-tc5817807.html

http://camel.465427.n5.nabble.com/Exhausted-after-delivery-attempt-1-caught-java-lang-NullPointerException-charset-tc5817815.html

https://issues.apache.org/jira/browse/CAMEL-12284