4

当我使用以下类时,我正在创建一个 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

============ 我的答案,因为我是新手,我无法回答自己的问题:)

我找到了一种解决方法,但对我来说,它不是很干净。首先,我在相关部分看到了这个链接

创建抽象的通用 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 中,我拥有我想要的东西是因为类型列表上的 @XmlElement 而不是因为抽象的 getter/setter。

4

0 回答 0