次のクラスを使用するときに、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 と継承で試しました
============ 私は新しく、自分の質問に答えることができないため、私の答え:)
回避策を見つけましたが、私にとってはあまりきれいではありません。まず、関連セクションでこのリンクを見ました
親抽象クラス:
@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 のおかげで必要なものが得られます。