0

我们有一个 Spring Integration 应用程序,它使用 JDBC 轮询器和 RowMapper 从数据库中读取并输出域对象的集合(假设结果集返回多行)。

然后将域对象编组为 XML。当使用 Castor 作为编组器时,这可以正常工作,并且 XML 表示域对象的集合:

<array-list>
   <order>
     <orderID>23940210</orderID>
     ...
   </order>
   <order>
   ...
</array-list>

我们现在希望从 Castor 切换到 JAXB。这是 XML 中 JAXB 编组器的定义:

<oxm:jaxb2-marshaller id="jaxbMarshallerBean">
   <oxm:class-to-be-bound name="com.mycompany.Order" />
</oxm:jaxb2-marshaller>

... JAXB 编组器用作 Spring 集成链中使用的转换器 ..

<int:chain input-channel="input" output-channel="output-jms">
    <si-xml:marshalling-transformer id="defaultMarshaller" marshaller="jaxbMarshallerBean" />
</int:chain>

当然域类是注释的:

@XmlRootElement(namespace ="Order")  
public class Order{
     ...

   @XmlElement(name="OrderID")    
   public String getOrderId() {
       return orderId;
   }

现在,抛出以下异常:

org.springframework.oxm.UncategorizedMappingException: 
Unknown JAXB exception; 
nested exception is javax.xml.bind.JAXBException: 
class java.util.ArrayList nor any of its super class is known to this context.

看起来 JAXB 不喜欢它正在处理域对象的集合这一事实。配置或处理此问题的正确方法是什么?

非常感谢

4

1 回答 1

0

当然,您需要一个解组转换器来从 XML 转换为 POJO。

我不知道是否有办法配置 JAXB 以直接处理它,但您可以在解组器之前添加一个 XPath 拆分器,在它之后添加一个聚合器。

于 2014-05-19T16:52:35.300 回答