2

使用 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:空字符串不会产生空元素

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

谢谢,

约安

编辑:除了以下任何一种方法之外,还有其他方法吗:
- 稍后将其设置回 null: parent.setChild(null);
- 从一开始就不要将其设置为对象

4

0 回答 0