HL7 2.7和Camel mina2

时间:2014-01-13 18:06:07

标签: routing apache-camel hl7 hl7-v2 mllp

我们的客户将HL7消息格式从2.3更改为2.7,并且我遇到了新消息格式的问题。基本上我们能够以这种方式使用mina2协议路由消息:

<route>
<from uri="mina2:tcp://10.124.199.40:2575?sync=true&amp;codec=#hl7codec&amp;minaLogger=true" />
[...]
</route>

它可以很好地完成消息标准的升级。实际上,将格式从2.3更改为2.7它不起作用,我们得到这个DEBUG消息:

 2014-01-13 10:15:57,361 DEBUG HL7MLLPDecoder [104]  - Start scanning buffer at position 0
 2014-01-13 10:15:57,361 WARN  HL7MLLPDecoder [122]  - Ignoring unexpected 1st end byte 28. Expected 2nd endpoint 
 2014-01-13 10:15:57,361 DEBUG HL7MLLPDecoder [56]  - No complete message in this packet

我们使用HAPI作为消息解析器,我担心它应该是问题但是,在这种情况下,我期待的是Camel应该能够通过mina2路由消息,当我们读取HL7消息时从我们的业务类中捕获异常。但它没有,似乎mina2无法路由消息。

有任何线索吗?是否有可能在被mina2解析之前捕获MLLP消息,以确保我们的客户以正确的格式发送它?

我还有另外一个问题。我试图生成一个非常简单的jUnit类来向String消息发送消息,但我不知道如何实现MLLP消息,我的问题是:它是mina2做的事情(将String消息包装成MLLP格式) )或者在发送HL7消息之前我要做的事情?

感谢, 安德烈

1 个答案:

答案 0 :(得分:1)

问题与通过mina2侦听器创建和发送的MLLP消息有关。在骆驼中,我以这种方式定义了路线:

<route>
    <from uri="mina2:tcp://localhost:2576?sync=true&amp;codec=#hl7codecDebug&amp;noReplyLogLevel=DEBUG" />
    <to uri="file://HL7Messages?fileName=${file:name.noext}&amp;fileExist=Append"/>
    <log message="MINA2 DEBUG Message received" loggingLevel="INFO" />
</route>

问题,基本上是关于camel-hl7编解码器:

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

当然我无法实际看到消息的内容,所以,我只是在HL7MLLPCodec类上添加了一些调试输出行,以帮助我理解问题所在。

现在将编解码器从官方apache切换到我的调试版本我能够看到在解码之前发送到mina2的所有字节并重定向到下一个路由步骤。

回顾一下,(我很确定将来会一次又一次地重读这篇文章),这些是封装HL7消息所需的字节:

startByte 0x0b The start byte spanning the HL7 payload.
endByte1 0x1c The first end byte spanning the HL7 payload.
endByte2 0x0d The 2nd end byte spanning the HL7 payload.

要启动驼峰上下文,我使用它:

Main main = new Main();
main.setApplicationContext(new FileSystemXmlApplicationContext("src/test/resources/META-INF/spring/LOCALHOST-camel-context.xml"));
main.setDuration(-1);

main.run();

main 是类 org.apache.camel.spring.Main

的实例