在输出消息 ESQL 中包含输入消息
Including the input message in the output message ESQL
假设我在 IIB 中有一个错误处理程序子流组件,它生成错误消息,然后将其输出到队列。
错误消息的格式类似于:
<ErrorMsg><Details>There was an error of some kind</Details><OriginalMsg></OriginalMsg></ErrorMsg>
MQInput Catch 和 Failure 终端的输出指向错误处理程序的输入。消息域在主消息流的 MQInput 节点上设置,可以是 XMLNSC 或未指定。
鉴于此,如果我想在错误消息中包含原始消息的副本,在 OriginalMsg 标记中(因此它需要是 CData),我该怎么做?
我已经尝试过类似于以下的方法(a. 无论如何都需要 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;
上面允许我部署我的 bar 文件,但输出只是一个空标签。
答案是使用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;
您的 inRef 变量可能不在 XMLNSC 的解析器下。 IBM Integration Bus Parser 只有在域解析器表示下才能将逻辑消息转换为物理消息。
为了确保您必须确保使用来自 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);
假设我在 IIB 中有一个错误处理程序子流组件,它生成错误消息,然后将其输出到队列。
错误消息的格式类似于:
<ErrorMsg><Details>There was an error of some kind</Details><OriginalMsg></OriginalMsg></ErrorMsg>
MQInput Catch 和 Failure 终端的输出指向错误处理程序的输入。消息域在主消息流的 MQInput 节点上设置,可以是 XMLNSC 或未指定。
鉴于此,如果我想在错误消息中包含原始消息的副本,在 OriginalMsg 标记中(因此它需要是 CData),我该怎么做?
我已经尝试过类似于以下的方法(a. 无论如何都需要 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;
上面允许我部署我的 bar 文件,但输出只是一个空标签。
答案是使用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;
您的 inRef 变量可能不在 XMLNSC 的解析器下。 IBM Integration Bus Parser 只有在域解析器表示下才能将逻辑消息转换为物理消息。
为了确保您必须确保使用来自 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);