Как обрабатывать объекты ответа в ответ на ответный трансформатор для пользовательских подтверждений в веселье 3.0?

StackOverflow https://stackoverflow.com//questions/21001790

  •  20-12-2019
  •  | 
  •  

Вопрос

Я использую веселье 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 в первую очередь, не сможет получить этот ответ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top