【问题标题】:Including the input message in the output message ESQL在输出消息 ESQL 中包含输入消息
【发布时间】:2017-03-13 15:27:37
【问题描述】:

假设我在 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 文件,但输出只是一个空标签。

【问题讨论】:

    标签: ibm-integration-bus extended-sql


    【解决方案1】:

    很可能您的 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);
    

    【讨论】:

    • 这很有帮助,谢谢;但我正在寻找一个比假设输入消息是 XMLNSC 更普遍的答案
    【解决方案2】:

    答案是使用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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2012-07-02
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多