2017-12-22 3 views
1

안녕하세요, JAXB를 사용하여 XML 파일을 Java 객체로 변환하려고하는데 자바가 매우 새로 생겼습니다. pojo 클래스를 만들었고 주석을 추가했지만 올바른지 확실하지 않습니다. 나는 구글에서 몇 시간을 보냈지 만 잘못된 것을 발견 할 수 없었다.xml 파일을 언 마샬링하는 동안 필드 속성이 null로 설정됩니다.

@XmlRootElement(name="question") 
    public class Question { 
    private int id; 
    private String questionname; 
    private List<Answer> answers; 
    private List<Marks> marks; 
    public Question() {} 
    public Question(int id, String questionname, List<Answer> answers, List<Marks> marks) { 
     super(); 
     this.id = id; 
     this.questionname = questionname; 
     this.answers = answers; 
     this.marks = marks; 
    } 

    @XmlElement(name="marks") 
    public List<Marks> getMarks() { 
    return marks; 
    } 
    public void setMarks(List<Marks> marks) { 
    this.marks = marks; 
    } 
    @XmlAttribute 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    @XmlElement 
    public String getQuestionname() { 
     return questionname; 
    } 
    public void setQuestionname(String questionname) { 
     this.questionname = questionname; 
    } 
    @XmlElement 
    public List<Answer> getAnswers() { 
     return answers; 
    } 
    public void setAnswers(List<Answer> answers) { 
     this.answers = answers; 
    } 
    } 


public class Answer { 

    private int id; 
    private String answername; 
    private String postedby; 
    public Answer() {} 
    public Answer(int id, String answername, String postedby) { 
     super(); 
     this.id = id; 
     this.answername = answername; 
     this.postedby = postedby; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getAnswername() { 
     return answername; 
    } 
    public void setAnswername(String answername) { 
     this.answername = answername; 
    } 
    public String getPostedby() { 
     return postedby; 
    } 
    public void setPostedby(String postedby) { 
     this.postedby = postedby; 
    } 
} 



    import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlElement; 

public class Marks { 

    private LongAnswer longAnswer ; 
    private ShortAnswer shortAnswer; 
    private String set; 

    @XmlAttribute 
    public String getSet() { 
    return set; 
    } 
    public void setSet(String set) { 
    this.set = set; 
    } 
    @XmlElement(name="longAnswer") 
    public LongAnswer getLongAnswer() { 
    return longAnswer; 
    } 
    public void setLongAnswer(LongAnswer longAnswer) { 
    this.longAnswer = longAnswer; 
    } 

    @XmlElement(name="shortAnswer") 
    public ShortAnswer getShortAnswer() { 
    return shortAnswer; 
    } 
    public void setShortAnswer(ShortAnswer shortAnswer) { 
    this.shortAnswer = shortAnswer; 
    } 


} 

public class LongAnswer { 

    private String set; 

    public String getSet() { 
    return set; 
    } 

    public void setSet(String set) { 
    this.set = set; 
    } 


public class ShortAnswer { 

    private String set; 

    public String getSet() { 
    return set; 
    } 

    public void setSet(String set) { 
    this.set = set; 
    } 
} 

사람이 어떻게 '마크'모델 클래스에 주석을 어떻게 설정하는 'longAnswer'와 'shortAnswer'말해 줄 수 :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<question id="1"> 
    <answers> 
     <answername>java is a programming language</answername> 
     <id>101</id> 
     <postedby>ravi</postedby> 
    </answers> 
    <answers> 
     <answername>java is a platform</answername> 
     <id>102</id> 
     <postedby>john</postedby> 
    </answers> 
    <questionname>What is java?</questionname> 
    <marks set=50> 
     <longAnswer set=45/> 
     <shortAnswer set=30/> 
    </marks> 
</question> 

뽀조 클래스 :

내 XML이다 들. 왜냐하면 나는 그들을 위해 null 값을 얻고 있습니다.

+0

나는 JAXB에 너무 익숙하지 않지만 XML이 작동하려면'set' 속성을 인용해야 할 수도 있습니다. 이상적으로 XML 선언 앞에 공백이 있으면 안되지만이 문제를 일으키지 않는 것 같습니다. – iainn

+0

@iainn 따옴표를 추가했지만 여전히 값은 null입니다. –

+0

피할 수있는 많은 불필요한 코드/클래스가 있습니다. 또한,'Question' 객체를 어디서 인스턴스화합니까? – Ravi

답변

0

set 속성에 @XmlAttribute으로 주석을 추가해야합니다. 그렇지 않으면 꽤 괜찮아 보입니다.

당신이 할 수있는 일은 XML 스키마를 생성하고 컴파일하는 것입니다.

관련 문제