WSO2 ESB 提供了 HL7 传输,这是一个不错的选择。传输以两种模式运行 1) 默认模式:自动确认 2) NACK 模式:无确认 3) ACK 模式:来自下游序列或另一个 HL7 端点的自定义确认。这些模式记录在http://docs.wso2.org/wiki/display/ESB451/HL7+Transport。此 JIRA 跟踪器还确认有关模式配置的相同信息。https://wso2.org/jira/browse/ESBJAVA-954
我面临的问题是 ACK 模式允许来自下游应用程序或序列的确认返回到已启动对 WSO2 ESB 的调用的应用程序。我可以在日志中清楚地看到下游应用程序或序列正在返回确认,并且正在被 HL7 传输 API 解析。但是,等待 WSO2 ESB 响应的应用程序始终只获得默认确认。
在查看 HL7 传输代码时,看起来 WSO2 代码有缺陷,并且它永远不会从下游序列返回确认。这是来自 HL7ProcessingContext.java 的方法
public Message handleHL7Result(MessageContext ctx, Message hl7Msg) throws HL7Exception
{
String resultMode = (String) ctx.getProperty(HL7Constants.HL7_RESULT_MODE);
if (resultMode != null) {
if (HL7Constants.HL7_RESULT_MODE_ACK.equals(resultMode)) {
return this.createAck(hl7Msg);
} else if (HL7Constants.HL7_RESULT_MODE_NACK.equals(resultMode)) {
String nackMessage = (String) ctx.getProperty(HL7Constants.HL7_NACK_MESSAGE);
if (nackMessage == null) {
nackMessage = "";
}
return this.createNack(hl7Msg, nackMessage);
}
} else if (this.isAutoAck()) {
return this.createAck(hl7Msg);
}
return this.createNack(hl7Msg, "Application Error: ACK/NACK was not explicitely returned");
}
如果我没记错的话,这段代码需要修改如下
***** Original Code from above****
if (HL7Constants.HL7_RESULT_MODE_ACK.equals(resultMode)) {
return this.createAck(hl7Msg);
}
***** Revised code *****
if (HL7Constants.HL7_RESULT_MODE_ACK.equals(resultMode)) {
OMElement omElement = msgCtx.getEnvelope().getBody().getFirstElement().getFirstElement();
String xmlFormat = omElement.toString();
Message message = this.xmlParser.parse(xmlFormat);
return message;
}
有人可以确认这个修复吗?