我正在使用3.0.1.7051。

我目前有2个工作频道,适用于2.2.2.6388。

通道1)test_adt_hl7_to_xml 频道2)test_xml_sender

通道1 - 接收HL7消息,将其转换为自定义XML并将其发送到通道2。 通道2 - 将XML发送到HTTP侦听器。 这与HTTP侦听器的XML响应确认有效。 响应是以XML格式。

<ADTAck>
    <Status>ERROR</Status>
    <Message>Payload does not contain a value</Message>
</ADTAck>
.

我能够将它一直处理到发送应用程序。直到我打开“持久队列”。一旦开启,响应将始终按预期从目的地排队。使用发送响应不起作用,因为响应处于XML格式。

我已经将这些频道移动到致响应变压器的3.0频道。

在响应变换器中,我有以下代码:

var ResponseMessage = response.getMessage();
logger.info("ResponseMessage: "+ ResponseMessage.toString());
var ResponseXML = new XML(ResponseMessage.toString());
logger.info("Response XML=" + ResponseXML.toString());   
responseMap.put('ACK', ResponseFactory.getSentResponse(ResponseXML));
.

在源连接器中,在“响应设置 - >响应”下,我选择了“ACK”

我能够在日志中看到响应对象的消息内容。但响应不会使其成为通道1(test_adt_hl7_to_xml)。

当我申请时:

return "My Message response";
.

在“后处理器脚本”中,我得到了一个响应。但我无法访问“响应变换器”创建的响应对象(“ACK”)。

我在这个论坛上阅读了每个'响应'线程。尝试过束版本2.x和现在版本3.但我没有靠近解决方案。

如何正确处理响应对象,以便通道1接收XML响应?

非常感谢您的帮助。

有帮助吗?

解决方案 2

我的解决方案v3.01: 在源通道变换器上(test_adt_hl7_to_xml):

globalMap.put("ADTRESPONSE","");
globalMap.put("ADTRESPONSEREADYFLAG","false");
.

在响应结束通道响应变换器(test_xml_sender) - 更新响应标志。

if (response.getMessage() != '') 
{
    var ResponseMessage = response.getMessage()
    var ResponseXML = new XML(ResponseMessage.toString());
    globalMap.put("ADTRESPONSE",ResponseXML.toString());
    globalMap.put("ADTRESPONSEREADYFLAG","true");
}else{//wait if queued}
.

在响应结束通道后处理器(test_xml_sender) - 将响应设置设置为“post处理器” 写一段时间循环。(如果你想要永远等待时使用时间漏)

var ADTResponseReadyFlag = globalMap.get("ADTRESPONSEREADYFLAG");

if(debug)logger.info("Start Response Wait")
while(ADTResponseReadyFlag == "false")
{
  ADTResponseReadyFlag = globalMap.get("ADTRESPONSEREADYFLAG");
}
if(debug) logger.info("End Response Wait")
return globalMap.get("ADTRESPONSE");
.

其他提示

回复:“narupley”员工

如果您的目的地启用了队列,那么从该目的地(或从目的地响应变换器创建的自定义变量)没有意义。目的地排队的整个点是在队列中删除接收消息并继续前进。没有什么可以回应的,因为您的目的地尚未发送消息。

它周围有一些乱写的方式,但你应该重新考虑你的消息/频道工作流程。一般而明,这是通过在链中移动较高的点来完成的。因此,如果通道1发送到发送到某些出站系统的通道2,并且通道1应该从出站系统接收响应,那么通道1应该是启用目的地队列的频道,而不是通道2.当然,这意味着发送到第1位通道1的始发系统将无法接收该响应。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top