java - 在 XMLSerializer 中从 Java 6 升级到 Java 7 时 JAXB 编码器抛出 NullPointerException

标签 java xml jaxb jaxb2 spring-oxm

我已经在网上搜索了一个解决方案,但我不知所措,所以我希望有人能在这里为我指明正确的方向。

我的任务是将一个使用 JAXB2 的应用程序升级到 Java 7。

因为我知道 JVM 7 可以运行 Java 6 编译代码,所以我首先尝试这样做,并在 com.sun.xml.internal.bind.v2.runtime.XMLSerializer 类中遇到空指针异常。

然后我在 Java 7 中重新编译了该应用程序并再次运行并出现了同样的问题。

我正在使用以下 Oracle JDK:Java SE 7u51 该应用程序还使用委托(delegate)给 JAXB 的 Spring OXM。

这是在 JAXB Marshaller 实例上调用 marshal 时发生的空指针异常的堆栈跟踪:

> java.lang.NullPointerException    at
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:627)
>   at
> com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:108)
>   at
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:343)
>   at
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:685)
>   at
> com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:54)
>   at
> com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:157)
>   at
> com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:144)
>   at
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:343)
>   at
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:582)
>   at
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:325)
>   at
> com.sun.xml.internal.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(ArrayReferenceNodeProperty.java:103)
>   at
> com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:144)
>   at
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:343)
>   at
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:582)
>   at
> com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:325)
>   at
> com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:483)
>   at
> com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:308)
>   at
> com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:236)
>   at
> org.springframework.oxm.jaxb.Jaxb2Marshaller.marshal(Jaxb2Marshaller.java:648)

也许我缺少一些额外的配置?

感谢任何帮助。将根据需要提供更多信息。

谢谢

最佳答案

尝试包含 jaxb-impl 的引用实现,至少它解决了 this guy with the same error 的问题

<dependency>
   <groupId>com.sun.xml.bind</groupId>
   <artifactId>jaxb-impl</artifactId>
   <version>2.2.7</version>
</dependency>

关于java - 在 XMLSerializer 中从 Java 6 升级到 Java 7 时 JAXB 编码器抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21393323/

相关文章:

java - 如何读取 optaplanner 中加载的 java 规则

java - 配置 Log4j XML 配置的方法

xml - 真正简单的 XML 文件命令行 SAX 解析器

java - JAXB Marshal 缺少属性/元素

java - Log4j 具有 log4j.properties 的两个输出?

java - Eclipse模块问题jdk 10

java - 使用 JAXB 将多个 XML 元素的内容提取为文本

java - 如何在 java 中解析 XML 标记的全部内容

java - JAXB 忽略 XmlElement 指令

java - Jersey 中的 XML 格式与 @rootelement