JAXB:空对象内容在编组时出错

时间:2012-12-05 18:48:26

标签: jaxb

使用com.sun.xml.bind jaxb-impl 2.2.6。

我有父母和孩子的对象,我想在马歇尔之后获得:

<parent/> or <parent></parent>

但我得到的是一个错误,如: 引起:

com.sun.xml.internal.bind.api.AccessorException: Object must have some value in its @XmlValue field: com.test.data.Child@....

以下是代码:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"content"})
@XmlRootElement(name = "child")
public class Child {
    @XmlValue
    protected String content;
    public String getContent() {
        return content;
    }
}
...

然后

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"child"})
@XmlRootElement(name = "parent")
public class Parent {
    protected Child child;
    public Child getChild() {
        return child;
    }
}

我做的是(那是因为我希望能够“以后”填写孩子的内容):

if(parent.getChild == null)
    parent.setChild(new Child());

然后,当我尝试编组时,我得到了上面的错误。

如果我尝试:

if(parent.getChild == null) {
    Child child = new Child();
    child.setContent("");
    parent.setChild(child);
}

然后我得到了预期的结果:

<parent><child></child></parent>

我可以通过永远不会在其父对象中设置子对象来获得我想要的东西(所以没有parent.setChild(...)),但如上所述,它将节省我更早地设置它的时间。

基本上我正在努力做与帖子完全相反的事情: JAXB: Empty string does not produce empty element

我做错了什么,或者我没有正确设置的东西?

谢谢,

的Yoann

编辑: 除了两者之外还有其他方式:
- 稍后将其设置为null:parent.setChild(null);
- 切勿将其首先设置为对象

0 个答案:

没有答案