2012-11-12 4 views
0

다음 두 클래스가 있습니다. JAXB가 응답 목록을 XML로 정렬하지 않는 이유가 있습니까? 나는 정확하게 마샬링 된 다른 속성들을 빠뜨렸다. 예, 답변 목록이 채워지지만 answers 요소는 표시되지 않습니다. 그대로 JAXB가 내 목록을 마샬링하지 않습니다.

public class Question { 

    private List<Answer> answers; 

    public List<Answer> getAnswers() { 
     return answers; 
    } 

    public void setAnswers(final List<Answer> answers) { 
     this.answers = answers; 
    } 
} 

퀴즈 객체

@XmlRootElement 
public class Quiz { 

    private List<Question> questions; 

    public Quiz() { 
     questions = new ArrayList<Question>(); 
    } 

    public List<Question> getQuestions() { 
     return questions; 
    } 

    public void setQuestions(List<Question> questions) { 
     this.questions = questions; 
    } 
} 

답변

1

당신의 모델은 나를 위해 작동합니다.

데모

package forum13350129; 

import java.util.*; 
import javax.xml.bind.*; 

public class Demo { 

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

     Question question1 = new Question(); 
     List<Answer> answers1 = new ArrayList(); 
     answers1.add(new Answer()); 
     answers1.add(new Answer()); 
     question1.setAnswers(answers1); 

     Question question2 = new Question(); 
     List<Answer> answers2 = new ArrayList(); 
     answers2.add(new Answer()); 
     answers2.add(new Answer()); 
     question2.setAnswers(answers2); 

     Quiz quiz = new Quiz(); 
     quiz.getQuestions().add(question1); 
     quiz.getQuestions().add(question2); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(quiz, System.out); 
    } 

} 

출력

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<quiz> 
    <questions> 
     <answers/> 
     <answers/> 
    </questions> 
    <questions> 
     <answers/> 
     <answers/> 
    </questions> 
</quiz> 

업데이트 # 1

: 아래의 예를 참조하십시오

내가하는 것처럼 JSON으로 가져 오려고하면 어떻게 될까요?

이것은 다릅니다. JSON 바인딩은 JAXB (JSR-222) 사양의 일부가 아닙니다. 이것은 당신의 환경이 다음 중 하나를 수행 의미 :

  1. JSON을 생산하는 투하와 같은 라이브러리와 JAXB의 IMPL 사용을 (참조 : http://blog.bdoughan.com/2011/04/jaxb-and-json-via-jettison.html를)
  2. 일부를 갖도록 잭슨과 같은 JSON 결합 라이브러리를 (사용 JAXB annotation support)
  3. JSON 바인딩을 제공하는 EclipseLink MOXy와 같은 JAXB impl 사용 (http://blog.bdoughan.com/2011/08/json-binding-with-eclipselink-moxy.html 참조).

    Marshaller marshaller = jc.createMarshaller(); 
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
        marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json"); 
        marshaller.marshal(quiz, System.out); 
    

    다음 JSON 생산할 것인가 : 다음과 같이 EclipseLink JAXB (MOXy)를 사용

{ 
    "quiz" : { 
     "questions" : [ { 
     "answers" : [ { 
     }, { 
     } ] 
     }, { 
     "answers" : [ { 
     }, { 
     } ] 
     } ] 
    } 
} 

업데이트 # 2

게으른로드 관계로 문제를 해결했습니다. 나는 저장소에서 Hibernate.initialize 을 사용하고있다. 내가 가지고있는 리소스에서이 퀴즈 개체를 반환하려고합니다. JAX-RS를 사용하고 있습니다.

사람들은 Hibernate 모델을 XML로 마샬링하는 데 문제가 있다는 것을 알고 있습니다. 문제는 Hibernate가 사용하는 프록시 객체 때문이라고 생각합니다. 아래 링크에서 XmlAdapter을 사용하여 프록시 개체와 실제 개체 사이를 변환하는 것이 좋습니다.

+0

당신이 내가 할로 JSON으로 그것을 얻을하려고하면? – LuckyLuke

+0

내 EJB에 올바르게 기록됩니다. 즉, 모든 속성이 초기화되고 데이터로 가득차 있습니다. 그러나 마샬링하려고 할 때 무언가가 발생합니다. 목록은 마샬링되지 않습니다. – LuckyLuke

+0

@Andy - 답변을 업데이트했습니다. BTW는 이러한 객체 JPA 엔티티입니까? –

관련 문제