我们有一个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 marshaller用作Spring Integration链中使用的变换器..
<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不喜欢它处理域对象集合的事实。配置或处理此问题的正确方法是什么?
非常感谢
答案 0 :(得分:0)
当然,您需要一个解组转换器从XML转到POJO。
我不知道是否有办法配置JAXB直接处理它,但你可以在unmarshaller之前添加一个XPath拆分器,然后在它之后添加一个聚合器。