2016-03-24 3 views
1

Я пытаюсь передать пользовательский контекст из узла SOAPAsyncRequest в узел SOAPAsyncResponse, переопределив локальную среду, как описано в документации IBM here и here.IIB - Как передать UserContext в узел SOAPAsyncRequest

Вот часть моего потока: flow

В Карта N вычислительном узле (Compute Mode установлен на LocalEnvironment и сообщения):

SET OutputLocalEnvironment = InputLocalEnvironment; 
SET OutputLocalEnvironment.Variables.RequestId = InputLocalEnvironment.Destination.HTTP.RequestIdentifier; 
SET OutputLocalEnvironment.Variables.Language = InputRoot.HTTPInputHeader."Accept-Language"; 
SET OutputLocalEnvironment.Destination.SOAP.Request.UserContext = CAST(ASBITSTREAM(OutputLocalEnvironment.Variables) as BLOB); 

В SetRequestId вычислительный узел:

DECLARE UserContext BLOB; 
SET UserContext = InputLocalEnvironment.Destination.SOAP.Response.UserContext; 

отладка значения LocalEnvironment после карты до N узла:

LocalEnvironment 
    Destination 
     HTTP 
      RequestIdentifier:BLOB:[[email protected] 
     RouterList 
      DestinationData 
       labelName:CHARACTER:GET 
     SOAP 
      Request 
       UserContext:BLOB:[[email protected] 

значения отладки после SOAP Асинхронного отклика N узла:

LocalEnvironment 
    SOAP 
     Response 
      MessageCorrelId:BLOB:[[email protected] 
    Destination 
     RouterList 
      DestinationData 
       labelName:CHARACTER:findXYZ 

Хотя LocalEnvironment правильно установлен после Карты к узлу N (см. отлажку выше), значение UserContext всегда равно нулю.

Редактировать: За исключением проблемы UserContext, мой поток работает исправно. Чтобы ответить на первый комментарий, да, уникальные идентификаторы установлены правильно.

+0

ли ваш запрос и ответ узлов спаренные с помощью уникального идентификатора недвижимости? –

ответ

1

Мне не удалось передать Переменные древовидная структура, но я нашел обходное решение, объединяя значения и сохраняя их в BLOB. И это не самый чистый способ его решения, и это решение легко реализовать при работе с более чем двумя объектами.

В Map To D Compute Node:

SET ConcatenatedContext = 'YourFirstString' || ';' || 'YourSecondString'; 
SET OutputLocalEnvironment.Destination.SOAP.Request.UserContext = CAST(ConcatenatedContext AS BLOB CCSID 1208); 

В SetRequestId Compute Node:

DECLARE RawValue CHARACTER; 
SET RawValue = CAST(InputLocalEnvironment.SOAP.Response.UserContext AS CHARACTER CCSID 1208); 
SET FirstString = SUBSTRING(RawValue BEFORE ';'); 
SET SecondString = SUBSTRING(RawValue AFTER ';'); 
Смежные вопросы