返回Web服务中的泛型类型

时间:2009-12-10 03:40:15

标签: java web-services generics

我是网络服务的绿色手。我写了一个泛型类作为这样的值持有者:

public class SearchResult<T> {
    private List<T> resultSet;
}

然后我写了一个网络服务方法:

public SearchResult<Book> getSearchResult(){
    ...
}

当我使用maven-jaxws-plugin生成客户端文件时,我发现泛型类型信息已经消失。他们看起来像:

public class SearchResult {
   private List<Object> resultSet;
}

public SearchResult getSearchResult(){
    ...
}

我的问题是,jaxws能保留这种类型的通用类型信息吗?我尝试将List作为返回类型,它确实有效。 在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

不确定是否有任何其他可能性,但我们正在使用

public class Books extends SearchResult<Book> {

}

效果很好(只要你没有太多不同的类型)。

答案 1 :(得分:1)

如果使用除源之外的任何内容生成客户端代码,则可能不包含通用信息。编译使用泛型的代码后,由于type erasure而丢失了有关泛型的信息。

答案 2 :(得分:1)

使用@XmlTransient@XmlElement

使您的通用结果类为abstract,并使resultList @XmlTransient和protected。

public abstract class SearchResult<T> {        

    protected List<T> content;

    @XmlTransient
    public abstract List<T> getContent();

    public abstract void setContent(List<T> content);
}

然后创建一个子类,在getter上使用@Xmlelement

public class BookResult extends SearchResult<Book> {

    private static final long serialVersionUID = 1L;

    @Override
    @XmlElement
    public List<Book> getContent() {
        return content;
    }

    @Override
    public void setContent(List<Book> content) {
        this.content = content;
    }

}