我们的客户将HL7消息格式从2.3更改为2.7,并且我遇到了新消息格式的问题。基本上我们能够以这种方式使用mina2协议路由消息:
<route>
<from uri="mina2:tcp://10.124.199.40:2575?sync=true&codec=#hl7codec&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消息之前我要做的事情?
感谢, 安德烈
答案 0 :(得分:1)
问题与通过mina2侦听器创建和发送的MLLP消息有关。在骆驼中,我以这种方式定义了路线:
<route>
<from uri="mina2:tcp://localhost:2576?sync=true&codec=#hl7codecDebug&noReplyLogLevel=DEBUG" />
<to uri="file://HL7Messages?fileName=${file:name.noext}&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
的实例