我正在使用WebSphere Message Broker,它有一个从队列中读取XML消息的消息流。如果消息是非标准类型(不符合XML标准),则将其转换为BLOB对象并审核到Oracle数据库。
问题是NON STANDARD消息而不是被审计到d / b正在落入退出队列。
在调查时,我知道在数据库中存储审计消息的字段是CLOB类型,而消息流正在将NON STANDARD消息转换为BLOB类型。
我想知道没有强制转换或转换是否可能。
这里是代码(在ESQL中),其中NON STANDARD消息被转换为BLOB类型:
MOVE aonMSG TO "OutputRoot"."BLOB";
SET msgChar = aonMSG;
SET messageType = 'NON_STANDARD_MESSAGE';
SET msgChar = CAST(OutputRoot."BLOB"."BLOB" As CHAR CCSID 819 ENCODING
OutputRoot.MQMD.Encoding );
答案 0 :(得分:0)
从代理的角度来看,您可以将消息作为BLOB引入,然后将其转发到XMLNSC,然后为非标准消息抛出异常,这样就可以在输入节点的catch路径上访问实际的输入比特流保证不转换或铸造。
上面的代码有点令人困惑,假设aonMsg是输入树的一部分,那么你将获取消息树的UCS-2部分并将其放在名为BLOB的文件夹中。然后,您将其转换为具有CCSID 819和队列管理器编码的CHAR(不是blob)。
如果要从树的任意部分创建BLOB,则需要使用“AS BITSTREAM”等序列化它。
或者,如果您只是问题,那就是在前往Oracle的路上发生了转换,您可能会发现需要确保列的类型正确并且odbc.ini文件设置正确。