2

QuestionsDataのリストを持つクラスがありますQuestionData。はQuestionData抽象クラスで、 と の 2 つの実装がTextQuestionDataありSelectionQuestionDataます。

問題は、 を実行した後、 のみclientResponse.getEntityのリストを持つオブジェクトを取得することSelectionQuestionDataですが、いくつかの質問のタイプが であることはわかっていTextQuestionDataます。

を追加しようとしまし@XmlSeeAlsoたが、役に立ちませんでした。また、要素の順序を変更しようとしました@XmlElementRefsが、それによりすべての質問がタイプになりTextQuestionDataました。

これが関連しているかどうかはわかりませんが、ジャージーで使用するオブジェクトはQuestionsData、メンバーとして持つ別の Jaxb オブジェクトです

コードは次のとおりです。

@XmlRootElement(name = "questions")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso({SelectionQuestionData.class, TextQuestionData.class })
public class QuestionsData {

    @XmlElementRefs({@XmlElementRef(type = TextQuestionData.class), @XmlElementRef(type = SelectionQuestionData.class)})
    private List<QuestionData> questions;

    private QuestionsData() {}

    public QuestionsData(List<QuestionData> questions) {
        this.questions = questions;
    }
}


@XmlRootElement(name = "question")
@XmlAccessorType(XmlAccessType.FIELD)
public class TextQuestionData extends QuestionData {

    @XmlElement
    private String someString;

    public TextQuestionData() {}
}


@XmlRootElement(name = "question")
@XmlAccessorType(XmlAccessType.FIELD)
public class SelectionQuestionData extends QuestionData {

    @XmlElements({@XmlElement(name = "option")})
    private List<String> options;

    public  SelectionQuestionData() {}
}
4

1 に答える 1

1

この使用例では、@XmlRootElementアンマーシャリング中にどのサブクラス ( でマップされる) をインスタンス化する必要があるかを決定するために、要素名が使用されます。両方のサブクラスをquestionJAXB (JSR-222) 実装にマップしたため、非整列化する正しいものを決定できません。それらを異なるルート要素にマップする必要があります。

テキスト質問データ

@XmlRootElement(name = "textQuestion")
@XmlAccessorType(XmlAccessType.FIELD)
public class TextQuestionData extends QuestionData {

    @XmlElement
    private String someString;

    public TextQuestionData() {}
}

選択質問データ

@XmlRootElement(name = "selectionQuestion")
@XmlAccessorType(XmlAccessType.FIELD)
public class SelectionQuestionData extends QuestionData {

    @XmlElements({@XmlElement(name = "option")})
    private List<String> options;

    public  SelectionQuestionData() {}
}

詳細については

于 2012-10-22T17:56:19.133 に答える