如何使用ActiveMQ(OpenWire)重新编组已修改的消息?

时间:2018-07-05 11:53:30

标签: activemq marshalling

首先对我要做什么进行一些解释。我正在编写一个Java(1.7)应用程序,它将尝试使用从生产者到目标消费者的OpenWire格式“模糊”通过ActiveMQ发送的XML消息。目的是评估目标如何响应发送给它的模糊消息。我正在Linux CentOS 6.6上使用ActiveMQ版本5.12.1。

有一个XML模式,用于定义将要发送的消息类型。我有单独的程序,这些程序生成这些消息的样本实例,并标识在哪里以发送的有线格式(在这种情况下为OpenWire)找到信息。该信息将用于模糊处理过程中,以了解要更改的数据的位置。

模糊测试过程的一部分包括从线路中捕获线路格式消息,进行更改并将修改后的消息转发到目标。只要更改了内容而不更改长度,我就能够成功修改数据并将其转发。如果修改导致长度更改,则与ActiveMQ服务器的连接将关闭,程序将失败。

研究表明OpenWire消息均以4字节整数开头,表示后续消息数据的长度。我更改了代码以调整该长度,以反映对测试数据所做的更改。那没有用。经过更多调查后,我发现仅更改长度字段不是正确的选择-但尚不清楚应该(或可以)做什么。

我的印象很深刻,最好的办法是使用ActiveMQ API重新整理已修改的消息数据并将其转发给目标。我不知道这是否对我有用。

我试图找到信息来帮助我确定所涉及的OpenWire消息的结构,以便我知道修改消息时需要做什么。我开始查看ActiveMQ javadocs,找到了openwire软件包。也许我可以利用这些来实现我需要进行的更改,并使其通过ActiveMQ成功转发并被目标接收。

是否有任何文档或示例代码提供有关如何正确使用此API来完成我所需要的内容的说明或示例?根据我的描述,使用API​​可以做到这一点吗?任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

看看http://camel.apache.org 无需直接解释连线格式。 甚至可以在amq服务器中运行。

答案 1 :(得分:0)

听起来您想通过ActiveMQ发送Xml数据。

  1. 您无需担心Openwire。客户端库为您处理。这是ActiveMQ JMS库用于与ActiveMQ进行通信的协议,而您的程序只需要担心如何与JMS进行通信。

  2. 确定用于与ActiveMQ ..通讯的API,如果是Java,则使用JMS API并发送TextMessage对象,该对象的主体设置为Xml数据的字符串表示形式。如果是C#,请查看ActiveMQ的NMS库。如果是PHP / Python / Perl或其他脚本语言,请查找STOMP库,并以Xml数据为正文发送文本消息。