当我使用以下类时,我正在创建一个 SOAP WebService:
首先,我有一个抽象和通用的类:
@XmlTransient
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class PaginatatedListContainer<T> {
@XmlElement
protected List<T> elements;
...getter and setter
}
然后,我有两个类继承传递一个类型作为类参数
@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
============ 我的答案,因为我是新手,我无法回答自己的问题:)
我找到了一种解决方法,但对我来说,它不是很干净。首先,我在相关部分看到了这个链接
父抽象类:
@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 中,我拥有我想要的东西是因为类型列表上的 @XmlElement 而不是因为抽象的 getter/setter。