通过JMS发送的XML消息(JAXB)为null

时间:2013-01-03 16:09:08

标签: java spring jaxb jms advanced-queuing

我想使用Springs Jaxb2marshallerjmsTemplate.convertAndSend(object)将对象生成的XML发送到oracle queue(AQ)。由于某种原因,当我发送消息时,null被插入到oracle队列中。当我从该对象类中删除一些字段或那些字段为空时 - 正常传递消息。随着这些领域回来 - 再次为空。在调试时,我看到形成了正确的xml消息,但不知道为什么数据库中存在null。没有抛出异常(或者至少我找不到它们)。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

问题与JAXB或Spring无关,它是oracle queue的类型。它的类型为SYS.AQ$_JMS_MESSAGE,它只能接收类型为VARCHAR2的消息,其中java中的最大等价值为500个符号String。当String大小超过500个符号时,null被排队。

解决方案是将AQ的类型更改为SYS.XMLTYPE(此类型的队列可以接收高达4GB的XML)。当然,必须修改消息发送方法。在发送之前,必须将XML String转换为XMLType