是否可以对用@XmlElementRef注释的引用对象使用@XmlValue注释?目标是生成以下XML输出:
<foo>
<bar>Blah</bar>
</foo>
给定以下示例,JAXBContext初始化抛出NPE:at com . sun . XML . bind . v2 . runtime . property . property factory . create(property factory . 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;
}
有没有办法根据实现实现所需的输出?我一直在研究适配器,但还没有成功实现一个。提前致谢!
我在这里是为了完全相同的问题。此问题在 1.8.0_77
中仍然存在。
正如< code>user3345125提到的,我用一个额外的伪属性绕过了它。
@XmlAttribute
public String getNothing() {
return null;
}
对于任何想要追踪的人。https://github.com/javaee/jaxb-v2/issues/1027
@blaise-作为一种解决方法,在Bar
类中创建一个可选的@XmlAtcade
或@XmlElement
注意:我是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) 提供程序(如日食链接 MOXy),则不会得到此异常。下面是一个链接,解释了如何使用 MOXy 作为 JAXB 提供程序:
这似乎是一个基本问题,但我无法在其他地方找到答案。如果这是一个重复的帖子,请原谅。 是否可以对标记为@XmlAccessorType(XmlAccessType. FIELD)的类进行@XmlValue注释? 我正在尝试使用JAXB解析XML文件,虽然XML本身很大并且有其他字段,但问题特定于此字段: 映射为: 该字段在XML中声明为令牌类型。 @XmlValue注释给我一个IllegalAnno
我有下一个html,我想解析它: 我有下一节课: 和: 现在,我还需要跨度的值(“bla-bla”)。因此,我将添加到类中: 位它给了我下一个错误: 我尝试使用@XMLMixed,但是没有成功。我会很高兴,例如代码的例子。谢了。
是否有可能有一个使用值 AND 元素呈现的 JAXB 元素? 我正在尝试渲染类似下面的内容: 它甚至可能不是有效的XML,但不幸的是,我试图渲染的东西需要它,而不是可选的。 如果有一个值和元素,则会给出一个。
我正在尝试创建一个可以同时包含元素和值的java/jaxb类。 我想在A类的列表中读取一个类的属性,并作为A类本身的值输出。 这是XML: 我必须阅读: 并生产: 这是我的错误类-工作正常: 我的设备类别: Jaxb 抱怨我不能在同一类中同时拥有 xml 元素(错误 )和 xml 值 如何正确建模/注释此内容,以允许我读取 error xml 标记的属性并将其生成为设备标记的值?
问题内容: 我有下一个html,我想解析: 我下一堂课: 和: 现在,我还需要span的值(“ bla bla”)。所以我添加到类中: 有点给我下一个错误: 我尝试使用@XMLMixed,但没有成功。我会很高兴例如代码示例。谢谢。 问题答案: 更新 可以同时具有文本和元素的子注释的任何元素都称为混合内容。在JAXB中,这对应于注释。 可以在自家的集合属性使用(见原来的答复),或组合,或。如果该元素
嗨,我正在解组一个XML文件,该文件有一个标记,可以包含值或元素列表。我想知道解组这种XML的最佳方法是什么。例子: 我无法改变XML的构建方式,因此我希望有人能给出答案。非常感谢。