使用jaxb将对象转换为XML的异常

时间:2013-05-14 14:27:38

标签: java xml jaxb

我正在尝试使用JAXB从对象构建XML。

但是我错过了一些东西,因为我得到了一个例外:

  

javax.xml.bind.MarshalException     - 链接异常:[com.sun.istack.internal.SAXException2:类Employee或其任何超类都知道此上下文。   javax.xml.bind.JAXBException:类Employee也不是它的任何超级   这个上下文已知类。]

@XmlRootElement(name = "employee")
public class Employee {
    private String name;
    private String employeeId;  

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(String employeeId) {
        this.employeeId = employeeId;
    }

}

@XmlRootElement(name = "Data")
public class Data {
    public Data() {
    }

    private List employees;

    @XmlElementWrapper(name = "employeeList")
    @XmlElement(name = "employee")
    public List getEmployees() {
        return employees;
    }

    public void setEmployees(List employees) {
        this.employees = employees;
    }

}


public static void main(String[] args) {
        ArrayList list = new ArrayList();

        Employee e1 = new Employee();
        e1.setName("Name");
        e1.setEmployeeId("1");
        list.add(e1);
        Data data = new Data();
        data.setEmployees(list);

        JAXBContext context;

        ByteArrayOutputStream outStream = new ByteArrayOutputStream();

        try {
            context = JAXBContext.newInstance(Data.class);
            Marshaller m = context.createMarshaller();
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            m.marshal(data, outStream);
        } catch (JAXBException e) {

            e.printStackTrace();
        }

    }

1 个答案:

答案 0 :(得分:4)

您需要执行以下操作之一,以便您的JAXB(JSR-222)实现知道employees类上的Data属性包含Employee的实例。

@XmlElementWrapper(name = "employeeList")
@XmlElement(name = "employee", type=Employee.class)
public List getEmployees() {
    return employees;
}

@XmlElementWrapper(name = "employeeList")
@XmlElement(name = "employee")
public List<Employee> getEmployees() {
    return employees;
}