2013-12-08 3 views
1

자습서 here을 따르려고하고 있으며 직렬화에 어려움을 겪고있는 것 같습니다. 좀 더 이런 식으로 뭔가를 기대하고 있습니다일반 래퍼 개체로 목록 마샬링

<?xml version="1.0" encoding="UTF-8"?> 
<WrapBean>[email protected]@49114668</WrapBean> 

: 나는 개체 마샬링 때, 나는 다음과 같은 출력을 얻을

<?xml version="1.0" encoding="UTF-8"?> 
<WrapBean> 
    <ChildBean> 
    <first_name>[name]</first_name> 
    <last_name>[name[</last_name> 
    <age>[age]</age> 
    </ChildBean> 
    <ChildBean> 
    ... 
    </ChildBean> 
</WrapBean> 

이 내 주요 방법 :

public static void main(String[] args) throws Exception { 
     JAXBContext context = (JAXBContext) JAXBContext.newInstance(WrapBean.class); 

     ArrayList<ChildBean> children = new ArrayList<ChildBean>(); 
     ChildBean c1 = new ChildBean(); 
     c1.setFname("larry"); 
     c1.setLname("sanderson"); 
     c1.setAge("13"); 
     children.add(c1); 

     ChildBean c2 = new ChildBean(); 
     c2.setFname("amber"); 
     c2.setLname("smith"); 
     c2.setAge("11"); 
     children.add(c2);  

     QName qName = new QName("WrapBean"); 
     WrapBean wrapper = new WrapBean(children); 
     JAXBElement<WrapBean> jaxbElement = new JAXBElement<WrapBean>(qName, WrapBean.class, wrapper); 
     marshaller.setProperty(JAXBMarshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(jaxbElement, System.out); 
    } 

내가 할 수있는 필요한 경우 빈 클래스를 게시하지만 요소 이름을 올바르게 가져 오는 데 필요한 setter 및 getter 및 주석 만 있습니다. 아무도 내가 누락 된 부분을 도울 수 있습니까?

편집 : 나는 또한 언급하고 싶었다는 랩퍼 오브젝트는 튜토리얼과 완전히 동일합니다

public class Wrapper<T> { 

    private List<T> items; 

    public Wrapper() { 
     items = new ArrayList<T>(); 
    } 

    public Wrapper(List<T> items) { 
     this.items = items; 
    } 

    @XmlAnyElement(lax=true) 
    public List<T> getItems() { 
     return items; 
    } 

} 

답변

1

당신은 컬렉션에있을 것 항목의 JAXBContext인지 확인해야합니다.

JAXBContext context = JAXBContext.newInstance(WrapperBean.class, ChildBean.class); 
+1

감사합니다. Blaise, 정확히 내가 놓친 것입니다. 그것이 내가 다르게하고 있었던 유일한 물건이었던 것을 생각하면 더 가까워 졌음에 틀림 없었다. 다시 한번 감사드립니다. – Prmths

+0

안녕 Blaise, 만약 당신이 목록 안에있는 개별 항목에 대한 래퍼를 만드는 방법을 알고 궁금해? 여기에 질문을 게시했습니다 : http://stackoverflow.com/questions/28946378/jaxb-wrapper-class-for-external-rest-api 기본적으로 REST API가있는 JAXB를 사용하고 있습니다. 항목의 내용은 동일하지만 요청 또는 응답 인 경우 루트 요소는 또는 이지만 그 목록의 각 항목에 대해 또는 의 요소를 갖습니다. 응답 또는 요청. 감사합니다. – CodyK