1

WSO2 ESB は、優れたオプションである HL7 トランスポートを提供します。トランスポートは、2 つのモードで動作します。1) デフォルト モード: 自動確認 2) NACK モード: 確認なし 3) ACK モード: ダウンストリーム シーケンスまたは別の HL7 エンドポイントからのカスタム確認。これらのモードはhttp://docs.wso2.org/wiki/display/ESB451/HL7+Transportに記載されています。この JIRA トラッカーは、モードの構成に関する同じ情報も確認します。https://wso2.org/jira/browse/ESBJAVA-954

私が直面している問題は、ダウンストリーム アプリケーションまたはシーケンスからの確認応答が、WSO2 ESB への呼び出しを開始したアプリケーションに返されることを可能にする ACK モードです。ダウンストリーム アプリケーションまたはシーケンスが確認応答を返し、それが 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_ACKでは、hl7 のプロパティを順番に使用して、バックエンド アプリケーションの応答を待つことができます。

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

AutoAckhl7 プロキシでパラメータを 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 に答える