Как обрабатывать объекты ответа в ответ на ответный трансформатор для пользовательских подтверждений в веселье 3.0?
Вопрос
Я использую веселье 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-прослушиватель. Это работает с подтверждением ответа XML от HTTP-прослушивателя. Ответ находится в формате 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";
.
В «Post Processor Script», я получаю ответ. Но я не могу получить доступ к объекту ответа («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 Processor" Напишите как цикл.(Используйте TimeoOut, если вы хотите, не хотите ждать вечно)
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");
. Другие советы
Ответить от: «Наруплели» веселья работник
Если ваш пункт назначения включен в очередь, то он не имеет смысла реагировать с этого пункта назначения (или из пользовательской переменной, созданной трансформатором ответа назначения).Вся точка назначения в очереди состоит в том, чтобы бросить приемное сообщение в очередь и двигаться дальше.Нечего было бы ответить, потому что ваш пункт назначения еще даже не отправил сообщение.
Вокруг него есть некоторые хаковы, но вы, вероятно, должны переосмыслить ваш рабочий / канальный рабочий процесс вместо этого.Как правило, это делается путем перемещения точкой в очереди выше в цепочке.Таким образом, если канал 1 отправляет на канал 2, который отправляет в некоторую исходящую систему, и канал 1 должен получить ответ от исходящей системы, то канал 1 должен быть тот, кто включен в зависимости от очереди, а не канал 2. Конечно, это означает, чтоИсходная система, отправленная на канал 1 в первую очередь, не сможет получить этот ответ.