4

次のクラスを使用するときに、SOAP WebService を作成しています。

まず、抽象クラスとジェネリック クラスがあります。

@XmlTransient
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class PaginatatedListContainer<T> {
@XmlElement
protected List<T> elements;

    ...getter and setter
}

次に、クラスパラメーターとして型を渡すことを継承する2つのクラスがあります

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class CollaboratorPaginatedList extends PaginatedListContainer<Collaborator> {
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class GenericUserPaginatedList extends PaginatedListContainer<GenericUser> {
}

私の問題は、wsimport を使用して WS のクライアントを生成するときに、生成された CollaboratorPaginatedList と GenericUserPaginatedList に適切なタイプの独自のリストがないことです。WSDL/XSD で確認したところ、代わりにオブジェクト リストがあり、その理由がわかりません。

理解してもらえますか?また、JAXB に強制的にリストを入力させる方法はありますか?

ありがとうございました :)

PS: @XmlElementWrapper を一般的な List と継承で試しました

============ 私は新しく、自分の質問に答えることができないため、私の答え:)

回避策を見つけましたが、私にとってはあまりきれいではありません。まず、関連セクションでこのリンクを見ました

抽象ジェネリック jaxb クラスの作成

親抽象クラス:

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class PaginatatedListContainer<T> {

    public abstract List<T> getElements();
    public abstract void setElements(List<T> elements);

}

子供クラス:

@XmlType
public class CollaboratorPaginatedList extends PaginatedListContainer<Collaborator> {

    @XmlElement
    private List<Collaborator> collaborators;

... reimplemented getter/setter
}

@XmlType
public class GenericUserPaginatedList extends PaginatedListContainer<GenericUser> {

    @XmlElement
    private List<GenericUser> collaborators;

... reimplemented getter/setter
}

実際、XSD/WSDL では、抽象 getter/setter ではなく、型付きリストの @XmlElement のおかげで必要なものが得られます。

4

0 に答える 0