注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。
已确认 JAXB RI 问题
我已经能够确认您在 JAXB RI 中看到的问题。我得到以下堆栈跟踪:
Exception in thread "main" java.lang.NullPointerException
at com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:113)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:166)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:494)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:311)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:126)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1148)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:130)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:248)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:235)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:445)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
at forum14490548.Demo.main(Demo.java:10)
这是JAXB RI中的一个错误,我建议在以下链接中打开票证:
选项 #1 - 使用带有 JAXB RI 的备用映射
以下映射似乎适用于 JAXB RI(使用@XmlElement
而不是@XmlElementRef
.
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "foo")
public class Foo
{
@XmlElement
private Bar bar;
}
选项 #2 - 使用备用 JAXB (JSR-222) 提供程序
您的映射是正确的。如果您使用另一个JAXB (JSR-222)提供程序,例如 EclipseLink MOXy,您将不会收到此异常。下面的链接解释了如何使用 MOXy 作为您的 JAXB 提供程序: