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

Posted

技术标签:

【中文标题】使用 jaxb 将对象转换为 XML 的异常【英文标题】:Exception converting object to XML using jaxb 【发布时间】:2013-05-08 21:25:35 【问题描述】:

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

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

javax.xml.bind.MarshalException - 带有链接异常:[com.sun.istack.internal.SAXException2: Employee 类或其任何超类在此上下文中是已知的。 javax.xml.bind.JAXBException:员工类或其任何超类 类在此上下文中是已知的。]

@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】:

您需要执行以下操作之一,以便您的 JAXB (JSR-222) 实现知道您的 Data 类上的 employees 属性包含 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;

【讨论】:

以上是关于使用 jaxb 将对象转换为 XML 的异常的主要内容,如果未能解决你的问题,请参考以下文章

当节点包含值时,使用 JAXB 将 XML 转换为对象

JAXB-java对象转XML字符串

JAXB实现java对象与xml之间转换

JAXB 实现java对象与xml之间互相转换

xml转对象1

通过JAXB完成Java对象与XML之间的转换