使用MessageBodyWriter
的实现将我的所有对象编组为文件(XML)。
@XmlRootElement(name="root")
@XmlAccessorType( XmlAccessType.FIELD )
class Myclass implements MyInterface{
// some private fields
}
interface MyInterface{
//some methods
}
我有一个List<MyClass>
个对象要保存在XML中,
但是当我打电话给Marshaller.marshall(object, outputstream)
时,我得到了这个例外:
[com.sun.istack.SAXException2:无法编组类型“.. MyClass”作为元素,因为它缺少@XmlRootElement注释]
但问题是我在MyClass
上有注释。
我对编组过程中出了什么问题有什么想法吗?
由于
答案 0 :(得分:2)
你可以编组一个实例,对吗?
MyClass myClass1 = new MyClass();
myClass1.setField("value");
JAXB.marshal(myClass1, writer);
但我假设你试图编制一份清单?像
这样的东西 List<MyClass> list = new ArrayList<MyClass>();
list.add(myClass1);
JAXBContext.newInstance(ArrayList.class).createMarshaller().marshal(list, writer);
如果要在一个XML文档中编组列表,则需要一个包装类:
@XmlRootElement(name="root")
@XmlAccessorType( XmlAccessType.FIELD )
public class MyWrapper {
@XmlElement(name="child")
private List<MyClass> list = new ArrayList<MyClass>();
public List<MyClass> getList() {
return list;
}
...
然后它应该工作,例如:
MyClass myClass1 = new MyClass();
myClass1.setField("value");
MyWrapper wrapper = new MyWrapper();
wrapper.getList().add(myClass1);
JAXB.marshal(wrapper, writer);
结果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<child>
<field>value</field>
</child>
</root>