【问题标题】:JAXB marshaller throwing NullPointerException when upgrading from Java 6 to Java 7 in XMLSerializer在 XMLSerializer 中从 Java 6 升级到 Java 7 时,JAXB 编组器抛出 NullPointerException
【发布时间】:2014-01-27 22:47:07
【问题描述】:

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

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

由于我了解JVM 7 可以运行Java 6 编译代码,这就是我首先尝试的,并且在com.sun.xml.internal.bind.v2.runtime.XMLSerializer 类中遇到了Null Pointer Exception。

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

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

这是在 JAXB Marshaller 实例上调用 marshal 时发生的 Null Pointer Exception 的堆栈跟踪:

> 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)

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

任何帮助表示赞赏。将根据需要提供更多信息。

谢谢

【问题讨论】:

  • 您的类路径或 WAR、EAR 中有哪些 jar?
  • @mentallurg 下面发布的解决方案 jethroo 有效。看起来 Java 7 曾经必须显式添加此引用 impl 依赖项,而对于 Java 6,则不需要。谢谢!

标签: java xml jaxb jaxb2 spring-oxm


【解决方案1】:

尝试包含 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>

【讨论】:

  • 看起来成功了!非常感谢!堆栈溢出永远不会让我失望:)
  • 不客气,拥有一个几乎无限的社区的全天候备份是件好事;)
猜你喜欢
  • 2021-10-17
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
相关资源
最近更新 更多