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