我正在尝试使用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();
}
}
答案 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;
}