【问题标题】:XML Message (JAXB) sent via JMS is null通过 JMS 发送的 XML 消息 (JAXB) 为空
【发布时间】:2013-01-03 16:09:08
【问题描述】:

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

谢谢!

【问题讨论】:

  • 你需要做两件事。首先,接受代码中的错误比 Spring 或消息系统中的错误更可能发生。
  • 第二,缩小调试范围。您说“形成了正确的 XML 消息”。你在哪里看到的?如果它在接收方,那么您不必担心发送方的任何事情。然后你说“为什么数据库中有空值”。这是您唯一的问题迹象吗?如果是,则意味着问题出在您从消息中提取字段并将它们写入数据库的位置。那是你应该花时间的地方。

标签: java spring jaxb jms advanced-queuing


【解决方案1】:

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

解决方案是将 AQ 的类型更改为 SYS.XMLTYPE(这种类型的队列最多可以接收 4GB 的 XML)。当然,消息发送方式也得修改。在发送之前,必须将 XML 格式的 String 转换为 XMLType

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2011-10-23
    • 2016-08-23
    • 2016-01-11
    相关资源
    最近更新 更多