骆驼类型转换在保险丝中失败

格尔吉·科瓦奇(GergelyKovács)

我与cxf生产商(骆驼v2.10)有一条骆驼路线:

<to uri="cxf:bean:myCxfEndpoint?dataFormat=PAYLOAD"/>

我知道骆驼会转换为CxfPayload,所以我在OSGi标头中添加了以下导入:

org.apache.camel.component.cxf,
org.apache.camel.component.cxf.converter,
org.apache.camel.converter.jaxb

因此,当生产者被触发时,将发生以下异常:

org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type: my.package.Foo to the required type: org.apache.camel.component.cxf.CxfPayload

我可以通过重新启动camel-jaxb捆绑软件来摆脱此异常,但是摆脱它是不够的:我需要防止它,因为它在每次重新启动Fuse时都会发生。

任何想法都受到高度赞赏:)

编辑

事实证明,问题并不总是会出现。有时在重新启动后可以工作,有时则不行。我尝试使用捆绑级别,但是仍然无法预测。我感觉可能是骆驼没有正确加载转换器,但是基于跟踪日志,看起来CxfPayloadConverter总是加载到ConverterRegistry中。

格尔吉·科瓦奇(GergelyKovács)

经过10个小时的跟踪和调试,我找到了解决方案:我在CXF Producer之前添加了手动编组,如下所示:

    <marshal ref="myDataFormat"/>
    <to uri="cxf:bean:myCxfEndpoint?dataFormat=PAYLOAD"/>

原因:我的假设是可以将任何POJO发送到Camel CXF端点,并且可以处理转换。我唯一能想到的是,骆驼以什么顺序加载转换器很重要。每隔第二次使用保险丝时,它都可以进行POJO->字符串-> CxfPayload转换,从而可以可传递地解决该转换。我决定不依赖于此传递转换逻辑,并检查了所有已加载的转换器。我发现在XML Node / Element-> CxfPayload之间的注册表中注册了某些直接转换器因此,我决定通过整理POJO来欺骗Camel的逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected]om 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档