2014-02-27 106 views
2

我在春天DSL骆驼背景下面bean定义OSGi容器(JBoss的保险丝):如何使用骆驼米娜hl7codec在

<bean id="hl7codec" class="org.apache.camel.component.hl7.HL7MLLPCodec"> 
    <property name="charset" value="iso-8859-1" /> 
</bean> 

而且我在这里使用在路线的起点:

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
<!-- <dataFormats><camel:hl7/></dataFormats> --> 
<route id="input"> 

    <!-- Here is the HL7 Receiver --> 
    <from uri="mina2:tcp://0.0.0.0:19191?sync=true&amp;codec=#hl7codec" id="CMHL7ReceiverTrinFeed"/> 
<to uri="direct:process"/> 
    </route> 

当我将骆驼上下文作为本地上下文运行时,即在Eclipse Fuse IDE中,一切正常。连接在端口19191打开,我很高兴地接收来自发送系统的HL7 MLLP消息。然而,当我在JBoss保险丝Karaf的本地实例运行包,我得到以下运行时异常:

JBossFuse:karaf @根>异常在线程“SpringOsgiExtenderThread-2” org.apache.camel.RuntimeCamelException :org.apache.camel.FailedToCreateRouteException:无法创建路由输入:Route [[来自[mina2:tcp://0.0.0.0:19191?sync = true & codec =#hl7co ...因为无法解析端点: mina2:// tcp://0.0.0.0:19191?codec =%23hl7codec & sync = true由于:无法找到合适的setter属性:codec,因为没有相同类型的setter方法:java.lang .String和类型转换可能:没有可用类型转换器从类型:java.lang.String转换为所需类型:org.apache.mina.filter.codec.ProtocolCodecFactory,值为#hl7codec

这是我从克劳斯·易卜生的无价的“骆驼在行动”一书中得到的理解,即在OSGi环境中,如果服务没有在OSGi服务注册表中被命名,那么Camel将回退到默认的ApplicationContextRegistry。我不知道这是否与此有关,或者是否有其他问题。我不知道为什么适合的属性设置器:编解码器可以在一个运行时环境中找到,而不是另一个。该软件包安装正常,所以我认为我已经注意到所有依赖关系,但启动该软件包会抛出此异常。

感谢您的任何建议和帮助。如果有必要,我很乐意提供更多信息。使用JBoss Fuse(6.0.0.redhat-056),JDK 1.7.0_45

+0

很怪。您的示例在配备了骆驼春天,骆驼核心,骆驼hl7和骆驼mina2功能的香草卡拉夫3.0中部署得很好。必须是具有特定版本/分布的东西。 –

回答

0

JBoss Fuse 6.0附带了Apache Camel 2.10.x.在该版本中,camel-hl7组件正在使用Mina 1.x。所以你需要使用mina,而不是mina2。

您可以从HL7文档看到米娜组件使用其中:http://camel.apache.org/hl7(参见页面顶部的最后一颗子弹)

+0

谢谢克劳斯!用米娜而不是米娜2做的伎俩!如果我们最终在未来某个时候使用Camel 2.11.x,我一定会记住这一点。 – Cormedan