当我使用以下类时,我正在创建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 with a generic List and inheritance
============我的答案是因为我是新人,我无法回答我自己的问题:)
我找到了一个解决方法,但对我来说,它不是很干净。 首先,我在相关章节中看到了这个链接
Creating abstract generic jaxb class
父抽象类:
@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。