向Mirth Connect发送HL7 HTTP请求后,获取原始数据异常求助
Mirth Connect HTTP监听器接收HL7时getRawData()返回XML的问题分析
问题说明
- 请求:Postman发送
Content-Type: application/hl7-v2+er7的HTTP请求,请求体为原始HL7文本:MSH|^~\&|APP|FAC^12345|YOU|YOU|20130114081000||ORU^R01|20130114081000|T|2.5.1| - 通道配置:源连接器为HTTP监听器,预期由“destination 1”返回响应
- 异常:目标连接器调用
connectorMessage.getRawData()时,得到的是XML内容而非原始HL7文本
原因分析
1. HTTP监听器解析格式配置错误
Mirth的HTTP监听器默认可能将消息按XML解析,而非保留原始HL7格式。需检查:
- 源连接器的Message Format是否设为
HL7 v2.x(而非XML) - 是否开启了自动解析转换:若开启,Mirth会把原始HL7转为内部XML结构存储,
getRawData()返回的就是转换后的XML
2. 通道转换规则干扰
如果源连接器的Transformer中配置了HL7转XML的规则,或全局设置了自动转换,connectorMessage存储的就是XML数据,调用getRawData()自然返回XML。
3. Content-Type未被正确识别
即使请求设置了application/hl7-v2+er7,Mirth可能未匹配该类型,导致默认按XML解析:
- 检查HTTP监听器的Inbound Properties,确认是否将
application/hl7-v2+er7添加为可识别的媒体类型 - 若开启了“Accept Any Content Type”但未指定解析格式,也会导致解析异常
4. getRawData()的理解偏差
connectorMessage.getRawData()返回的是Mirth内部处理后的原始数据,而非HTTP请求的原始体。如果Mirth已将HL7转为XML,该方法就返回XML。要获取HTTP原始请求体,可使用:
var rawHttpBody = connectorMessage.getChannel().getConnectorMessageService().getRawData(connectorMessage.getId());
或在源Transformer中将原始请求体存入通道变量,再在目标连接器读取。
解决建议
- 配置HTTP源连接器:将Message Format设为
HL7 v2.x,并设置Raw Data Handling为保留原始数据 - 检查源Transformer,移除不必要的HL7转XML规则
- 在HTTP监听器的Content Types中添加
application/hl7-v2+er7,确保Mirth正确识别请求类型 - 使用上述替代代码或通道变量获取HTTP原始请求体
内容的提问来源于stack exchange,提问作者user1902346
相关产品推荐
相关产品推荐

