java - 通过 JMS 发送的 XML 消息 (JAXB) 为空

标签 java spring jaxb jms advanced-queuing

我想将使用 Springs Jaxb2marshallerjmsTemplate.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/

相关文章:

java - 调用静态方法并将模型传递给 Controller

java - 在数组列表Java中拆分字符串

java - Java 上 Gmail 的 SMTP 客户端使用套接字身份验证问题

java - 获取一系列List<Object>列表

java - REST java 中的通用响应处理

java - 免费的java数据可视化库?

java - Thymeleaf:用 <br> 替换换行符

java - Spring中使用注解与XML配置的情况?

java - Spring中DataBinder中setAllowedFields和setDisallowedFields方法的影响

java - JAXB,解码时如何验证可空字段和必填字段