1

我有以下 XML 有效负载,我正在尝试将其用于 Spring Integration 和 Spring Integration AMQP:

<?xml version="1.0" encoding="UTF-8"?>
<order>
   <items>
      <item_name>Item1</item_name>
   </items>
   <items>
      <item_name>Item2</item_name>
   </items>
   <items>
      <item_name>Item3</item_name>
   </items>
</order>

我正在使用 xpath-splitter 拆分消息:

<int-xml:xpath-splitter input-channel="amqpInboundChannel" output-channel="aggregateChannel">
    <int-xml:xpath-expression expression="//items"></int-xml:xpath-expression>
</int-xml:xpath-splitter>

我工作正常,消息被拆分为 3 条新消息,例如使用此有效负载:

<?xml version="1.0" encoding="UTF-8"?>
<items>
   <item_name>Item1</item_name>
</items>

在此步骤之后,将使用此设置聚合消息:

<int:aggregator input-channel="aggregateChannel" output-channel="channelSJ" message-store="messageStore">
</int:aggregator>

<bean id="messageStore" class="org.springframework.integration.store.SimpleMessageStore" />

作为最后一步,使用此出站通道适配器将消息发送到交换:

<amqp:outbound-channel-adapter channel="channelSJ" exchange-name="ex_store" routing-key="sj" amqp-template="rabbitTemplate" header-mapper="myHeaderMapper"/>

<int:channel id="channelSJ">
    <int:interceptors>
        <int:wire-tap channel="logger"/>
    </int:interceptors>      
</int:channel>

不幸的是,出了点问题,因为我最终得到了类似这个有效载荷的东西。我需要它保持 XML 格式。

在此处输入图像描述

4

1 回答 1

1

您正在向CollectionAMQP 适配器发送一个字符串。

默认情况下,该适配器只能处理String,byte[]Serializable; 在这种情况下,他将使用 Java 序列化,Collection因为Serializable.

你有几个选择...

  • JsonMessageConverter在适配器中使用 a ,amqp-template集合将呈现为 JSON。
  • 在聚合器和适配器之间添加一个转换器,将集合转换回单个String.
于 2013-11-05T18:50:05.803 回答