Jaxb未能对一个带注释的课程进行编组

时间:2011-11-29 16:16:43

标签: java jaxb jersey

使用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上有注释。 我对编组过程中出了什么问题有什么想法吗?

由于

1 个答案:

答案 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>