Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JAVA访问IIB中的消息内容_Java_Ibm Integration Bus - Fatal编程技术网

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

使用JAVA访问IIB中的消息内容,java,ibm-integration-bus,Java,Ibm Integration Bus,有人知道如何在Java计算节点中访问MbMessage的内容吗?我正在使用IBMIntegrationToolkit10,到目前为止,我只知道消息由一个根元素和多个子元素组成 我从MQ接收JSON文本,我只需要在compute节点中访问它,修改它并将其发送到Azure服务总线,但我很难从消息中访问JSON文本 我试图访问各种MbMessage元素,但没有从中获得任何合理的值。我将输出作为异常抛出到错误日志中。我得到的唯一合理的数据是来自Chapter元素,但我想格式是十六进制的。见此: "7b2

有人知道如何在Java计算节点中访问MbMessage的内容吗?我正在使用IBMIntegrationToolkit10,到目前为止,我只知道消息由一个根元素和多个子元素组成

我从MQ接收JSON文本,我只需要在compute节点中访问它,修改它并将其发送到Azure服务总线,但我很难从消息中访问JSON文本

我试图访问各种MbMessage元素,但没有从中获得任何合理的值。我将输出作为异常抛出到错误日志中。我得到的唯一合理的数据是来自Chapter元素,但我想格式是十六进制的。见此:

"7b224865616422203a207b22536f7572636553797374656d223a224d565844445441505244222c2022546172676574223a2241677265656d656e74222c2022416374696f6e223a2264656c657465222c20224d6573736167654964223a22222c2022436f72656c6174696f6e4964223a22222c2254696d657374616d70223a223230313930333230313631383531333636373230303030303030222c20224368616e67654964223a22227d2c224974656d7322203a207b2241677265656d656e744964223a225357453134305f36303736343336222c224d616368696e654b6579223a2231313131303337313333222c2241677265656d656e74436c617373223a22353631222c2241677265656d656e744e756d626572223a2242303638323135222c224c696e654e756d626572223a22315f3330222c22436f6e74726163746564486f757273223a22313030222c2241677265656d656e7456616c696446726f6d223a223230313930333132222c2241677265656d656e7456616c6964546f223a223230323230333131222c224c6173744d6f646966696564223a223230313930333230313631383531333636373230303030303030222c22497349536974654f726967696e61746564223a2230222c22497344656c657"

// This is how i see in log what is in the element value of a chapter
if(true){
    throw new Exception("Message Content: " + outMessage.getRootElement().getLastChild().getLastChild().getValueAsString());
}

我希望得到发送到消息队列的JSON文本。

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

给水滴的一部分喂食

7b224865616422203a207b22536f7572636553797374656d223a224d565844445441505244222c2022546172676574223a2241677265656d656e74222c20 
转换成十六进制到ASCII的转换器

 {"Head" : {"SourceSystem":"MVXDDTAPRD", "Target":"Agreement",   
这基本上告诉您您的消息尚未被解析

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

一旦解决了解析器问题,就可以开始遍历输入树并构建输出树。下图来自此链接,显示了元素树的结构。注意,在您的例子中,XML节点实际上是JSON

如果知道名称,可以使用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会让您

搜索Java代码示例MbElement将获得此链接,该链接显示如何使用MbElement类

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


谢谢您的回复。我要试试这个。至少现在我知道十六进制字符串实际上是我需要访问的完整消息。我在创建新的MbMessage的过程中也遇到了一些困难,所以再次感谢这个扩展。现在一切都正常了。非常感谢!我相信到时候我会有更多的问题。我是IBM产品的新手,刚刚熟悉IBM控制台、Toolkit、MQ的基础知识,并将barfiles部署到集成节点中。我会接受答案,一旦我发现如何:)。