我想将使用 Springs Jaxb2marshaller
和 jmsTemplate.convertAndSend(object)
从对象生成的 XML 发送到 Oracle 队列 (AQ)。由于某种原因,当我发送消息时,null 被插入到 oracle 队列中。当我从该对象类中删除一些字段或这些字段为空时,消息会正常传递。那些字段回来后——又是空的。调试时,我看到形成了正确的 xml 消息,但不知道为什么数据库中存在 null。没有抛出异常(或者至少我找不到它们)。有什么想法吗?
谢谢!
最佳答案
该问题与 JAXB 或 Spring 无关,而是 oracle 队列的类型。它的类型是SYS.AQ$_JMS_MESSAGE
,它只能接收VARCHAR2
类型的消息,在java中最大等价的是500个符号String
。当String
大小超过500个符号时,null被排队。
解决方案是将AQ的类型更改为SYS.XMLTYPE
(这种类型的队列最多可以接收4GB的XML)。当然,消息发送方式也得修改一下。在发送之前,必须将 XML 的 String
转换为 XMLType
。
关于java - 通过 JMS 发送的 XML 消息 (JAXB) 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14142633/