2013-05-14 2 views
2

JAXB를 사용하여 객체에서 XML을 작성하려고합니다.jaxb를 사용하여 객체를 XML로 변환하는 중 예외가 발생했습니다.

하지만 예외 얻을 수 있기 때문에 내가 뭔가를 놓친 거지 :

javax.xml.bind.MarshalException - 링크 제외 : [com.sun.istack.internal.SAXException2 : 클래스 직원이나 중 하나를 그것의 슈퍼 클래스는이 문맥에 알려져있다. 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(); 
     } 

    } 

답변

4

당신은 다음 중 하나를 수행해야 당신의 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; 
} 
관련 문제