2017-03-13 131 views
0

假設我在IIB中有一個錯誤處理程序子流程組件,它會生成一條錯誤消息,然後將其輸出到隊列中。在輸出消息中包含輸入消息ESQL

錯誤消息是在類似的格式:

<ErrorMsg><Details>There was an error of some kind</Details><OriginalMsg></OriginalMsg></ErrorMsg>

從中,MQInput捕獲和故障點終端的輸出到錯誤處理程序的輸入。消息域在主消息流的MQInput節點上設置,並且可以是XMLNSC或未指定。

鑑於此,如果我想在錯誤消息中包含原始消息的副本,在OriginalMsg標記中(因此它需要是CData),我該怎麼做呢?

我已經試過類似下面的東西(其中需要XMLNSC反正,和b似乎不工作。):

DECLARE InputMessageBlob BLOB ASBITSTREAM(inRef.XMLNSC, inRef.Properties.Encoding, inRef.Properties.CodedCharSetId); 
DECLARE InputMessageChar CHAR CAST(InputMessageBlob AS CHAR CCSID 1208); 
SET OutputRoot.XMLNSC.nm1:ErrorMsg.nm1:OriginalMsg.(XMLNSC.CDataField)nm1:Content = InputMessageChar; 

上面讓我部署我吧文件,但輸出只是一個空標籤。

回答

0

的答案是使用InputBody:

DECLARE InputMessageBlob BLOB ASBITSTREAM(InputBody); 
DECLARE InputMessageChar CHAR CAST(InputMessageBlob AS CHAR CCSID InputRoot.MQMD.CodedCharSetId); 
SET OutputRoot.XMLNSC.nm1:ErrorMsg.nm1:OriginalMsg.(XMLNSC.CDataField)nm1:Content = InputMessageChar; 
0

It's可能你inRef變量it's不低於XMLNSC的解析器。 IBM Integration Bus Parser只有在域解析器表示下才能將邏輯消息轉換爲phisycal消息。

要確保你必須確保在下面的例子中使用來自InputRoot消息,如:

DECLARE dataToBeParsed REFERENCE TO InputRoot.XMLNSC; 
MOVE dataToBeParsed LASTCHILD; 

DECLARE blobEnvelope BLOB ASBITSTREAM(dataToBeParsed 
              ENCODING InputRoot.Properties.Encoding 
              CCSID InputRoot.Properties.CodedCharSetId 
              SET '' 
              TYPE '' 
              FORMAT '' 
              OPTIONS FolderBitStream 
              ); 

DECLARE envelope CHAR CAST(blobEnvelope AS CHAR CCSID InputRoot.Properties.CodedCharSetId); 
+0

這是有幫助的,謝謝;但我一直在尋找一個更一般的答案,而不是假設輸入消息是XMLNSC – simonalexander2005