使用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);
- 切勿将其首先设置为对象