目前,我在自编写组件中通过tcp接收消息,允许我将Netty
用作TCP服务器生产者。
我收到的邮件格式为XML
,例如:
<customheader>
<someattribute></someattribute>
</customheader>
<custombody>
</custombody>
我收到的消息存储在byte[]
中,并将其发送到另一个端点我通过以下方式创建新的交换:
Exchange exchange = new DefaultExchange(endpoint);
exchange.getContext().createProducerTemplate().sendBody("someendpointuri", receivedbytes);
现在我的问题:
receivedbytes
从byte[]
转换为其他数据类型或byte[]
好吗?< / LI>
感谢您的帮助
答案 0 :(得分:0)
您正在创建新的Exchange,但您实际上并未使用它。相反,您只能使用它来访问CamelContext。方法sendBody
正在为您创建一个新的Exchange,而这个Exchange实际上是发送到someendpointuri
指定的端点。请注意,每次要发送消息时都会you should not create a new producer template。
当您说您将邮件存储为byte[]
时,我假设您将邮件存储在邮件正文中。在这种情况下,您将customheader
和custombody
存储为byte[]
,Camel将它们视为邮件正文,而不是标题。
如果您想使用与Camel标头相关的组件或语言结构,您需要解析customheader
,然后使用Exchange.getIn().setHeaders()
(see API将其设置在消息标题上附有关于此的说明)。如果您这样做,您可能只想在custombody
中设置Exchange.getIn().setBody()
的内容。
如果在自定义组件中进行了这些更改,则组件现在将仅处理此特定XML格式。如果您希望保持组件的通用性,则可以改为实现自定义DataFormat并在路由中调用marshal()
和unmarshal()
。我认为SOAP DataFormat做的事非常相似。