使用 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);
- 从一开始就不要将其设置为对象