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;
}
誰かがこの修正を確認できますか?