JAXB / JAXWS,泛型和继承

时间:2013-06-28 07:47:03

标签: generics inheritance jaxb xsd jax-ws

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

0 个答案:

没有答案