gpt4 book ai didi

jaxb - 将 JAXB @XmlValue 与 @XmlElementRef 结合使用

转载 作者:行者123 更新时间:2023-12-01 12:47:31 26 4
gpt4 key购买 nike

是否可以在使用@XmlElementRef 注释的引用对象上使用@XmlValue 注释?目标是生成以下 XML 输出:

    <foo>
<bar>Blah</bar>
</foo>

给定以下示例 JAXBContext 初始化抛出 NPE:在 com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:128)

Foo 类

     @XmlRootElement(name = "foo")
public class Foo
{
@XmlElementRef
private Bar bar;
}

酒吧类

     @XmlRootElement(name = "bar")
public class Bar extends BarBase // BarBase is annotated with @XmlTransient
{
@XmlValue
private String value;
}

有没有什么方法可以根据实现来达到预期的输出?我一直在研究适配器,但未能成功实现。提前致谢!

最佳答案

注意:我是 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 提供者:

关于jaxb - 将 JAXB @XmlValue 与 @XmlElementRef 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14490548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com