2017-03-13 152 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