2017-12-22 12 views
1

こんにちは、JAXBを使用してxmlファイルをJavaオブジェクトに変換しようとしています。私はpojoクラスを作成し、いくつかの注釈を追加しましたが、正しいかどうかはわかりません。私はグーグルで何時間も過ごしましたが、間違っているものは見つけられませんでした。xmlファイルのアンマーシャリング中にフィールド属性がnullになる

これは私のxmlです:

<?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> 

POJOクラス:

@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' を設定するために教えてもらえますフィールド。私はそれらのためのnull値を取得しているので。

+0

私はJAXBに慣れていませんが、そのXMLが機能するには 'set'属性を引用する必要があります。理想的には、XML宣言の前に空白を入れてはいけませんが、この問題を引き起こしていないように思えます。 – iainn

+0

@iainn引用符を追加しましたが、値はnullです。 –

+0

不要なコード/クラスはたくさんありますが、これは回避できます。また、 'Question'オブジェクトをどのようにインスタンス化していますか? – Ravi

答えて

0

あなたのsetプロパティには@XmlAttributeと注釈を付ける必要があります。それ以外の場合はかなり上手く見えます。

また、XMLスキーマを作成してコンパイルすることもできます。

関連する問題