我是网络服务的绿色手。我写了一个泛型类作为这样的值持有者:
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作为返回类型,它确实有效。 在此先感谢您的帮助。
答案 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;
}
}