1

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;
}

有人可以确认这个修复吗?

4

2 回答 2

1

从 ESB 4.7.0 版本开始,您可以依次使用HL7_APPLICATION_ACKhl7 中的属性来等待后端应用程序的响应。

<property description="HL7_APPLICATION_ACK" name="HL7_APPLICATION_ACK" scope="axis2" type="STRING" value="true"/>

AutoAck在 hl7 代理中参数为 false

<parameter name="transport.hl7.AutoAck">false</parameter>

于 2017-03-31T08:40:35.230 回答
0

现有代码实际上是正确的,如果您仔细查看 JIRA 问题,它已经提到了应该如何使用该功能。所以基本上,用户自己不必创建 ACK HL7 消息的 XML 表示,当他设置一个名为“HL7_RESULT_MODE”的 Axis2 范围消息属性时,这会自动完成,以表示 ACK 或 NACK。因此,基本上使用该功能,下游应用程序/序列可以通过适当地设置消息属性值来选择 ACK 或 NACK。希望这可以解决问题。

干杯,安佳娜。

于 2013-02-23T15:55:52.040 回答