为了账号安全,请及时绑定邮箱和手机立即绑定

使用JAVA访问IIB中的消息内容

使用JAVA访问IIB中的消息内容

墨色风雨 2022-11-30 16:55:13
有谁知道如何在 Java 计算节点中访问 MbMessage 的内容?我正在使用 IBM integration Toolkit 10,到目前为止我只知道 Message 由一个带有各种子元素的根元素组成。我从 MQ 接收 JSON 文本,我只需要在计算节点中访问它,修改它并将它发送到 Azure 服务总线,但我很难从消息中访问 JSON 文本。我试图访问各种 MbMessage 元素,但没有从中获得任何合理的价值。我将输出作为异常放入错误日志中。我得到的唯一合理数据来自 Chapter 元素,但我猜格式是十六进制的。看到这个:"7b224865616422203a207b22536f7572636553797374656d223a224d565844445441505244222c2022546172676574223a2241677265656d656e74222c2022416374696f6e223a2264656c657465222c20224d6573736167654964223a22222c2022436f72656c6174696f6e4964223a22222c2254696d657374616d70223a223230313930333230313631383531333636373230303030303030222c20224368616e67654964223a22227d2c224974656d7322203a207b2241677265656d656e744964223a225357453134305f36303736343336222c224d616368696e654b6579223a2231313131303337313333222c2241677265656d656e74436c617373223a22353631222c2241677265656d656e744e756d626572223a2242303638323135222c224c696e654e756d626572223a22315f3330222c22436f6e74726163746564486f757273223a22313030222c2241677265656d656e7456616c696446726f6d223a223230313930333132222c2241677265656d656e7456616c6964546f223a223230323230333131222c224c6173744d6f646966696564223a223230313930333230313631383531333636373230303030303030222c22497349536974654f726967696e61746564223a2230222c22497344656c657"// This is how i see in log what is in the element value of a chapterif(true){    throw new Exception("Message Content: " + outMessage.getRootElement().getLastChild().getLastChild().getValueAsString());}我希望获得发送到消息队列的 JSON 文本。
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

所以我怀疑前面的输入节点,或者你的代码,已经指定了 BLOB 解析器而不是 JSON 解析器。顺便说一句,如果您没有提供解析器的名称,则 BLOB 解析器是默认的。

提供 BLOB 的一部分

7b224865616422203a207b22536f7572636553797374656d223a224d565844445441505244222c2022546172676574223a2241677265656d656e74222c20

进入十六进制到 ASCII 转换器https://www.rapidtables.com/convert/number/hex-to-ascii.html,你得到

 {"Head" : {"SourceSystem":"MVXDDTAPRD", "Target":"Agreement",

这实质上告诉您您的消息尚未被解析。

我提供了几个 HTTPInput 节点的屏幕截图,您通常会在输入和输出节点的属性编辑器中找到输入/输出消息解析选项卡。

//img1.sycdn.imooc.com//63871ae20001c60706600432.jpg

一旦解决了解析器问题,就可以开始遍历输入树并构建输出树。下图来自此链接https://www.ibm.com/support/knowledgecenter/en/SSMKHH_9.0.0/com.ibm.etools.mft.doc/ac69091_.htm并显示了元素树的结构。请注意,在您的情况下,XML 节点实际上是 JSON

//img1.sycdn.imooc.com//63871aec0001f1ed06530536.jpg

如果您知道这些名称,则可以使用 XPath 获取元素引用。


MbElement inputRoot = inputMessageAssembly.getMessage().getRootElement();

MbElement srcSys = inputRoot.getFirstElementByPath("/JSON/Data/Head/SourceSystem");

要告诉 IIB 输出消息应该是 JSON 格式,您需要像这样为其提供 JSON 解析器的名称。


MbMessage outMessage = new MbMessage();

MbElement outRoot = outMessage.getRootElement();

MbElement outBody = outRoot.createElementAsLastChild(MbJSON.PARSER_NAME);

最后但并非最不重要的是,您当前的代码行现在可能会显示一个空字符串或 null,因为您要导航到的元素没有任何值,只有一个名称。


参考资料:搜索 MbElement 可获得https://www.ibm.com/support/knowledgecenter/en/SSMKHH_9.0.0/com.ibm.etools.mft.plugin.doc/com/ibm/broker/plugin/MbElement。网页格式


搜索 Java 代码示例 MbElement 将为您提供此链接,其中显示了如何使用 MbElement 类。https://www.programcreek.com/java-api-examples/?api=com.ibm.broker.plugin.MbElement


如果要看元素树的结构,有几个${Root} ${Environment} ${LocalEnvironment} ${ExceptionList},然后添加Trace节点。您几乎可以将它们放在任何您喜欢的地方。下面的屏幕截图来自另一个答案,但很好地说明了它们的用途。请注意,输出文件由 Trace 节点保持打开状态,刷新缓冲区的最简单方法是停止并重新启动流,重新部署也可以。

//img1.sycdn.imooc.com//63871afa0001439b06600446.jpg

查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号