2009-12-10 197 views
2

我是web服務中的綠色代表。我寫了一個泛型類爲這樣的值保持:在WebService中返回泛型類型

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

然後我寫了一個Web服務方法:

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

當我使用maven-JAXWS-插件生成客戶端文件,我發現通用類型信息已經消失。他們看起來像:

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

public SearchResult getSearchResult(){ 
    ... 
} 

我的問題是,做jaxws可以保留這種類型的通用類型信息?我嘗試列表作爲返回類型,它的工作。 在此先感謝您的幫助。

回答

1

如果客戶端代碼是使用除源之外的任何其他代碼生成的,那麼它可能不包含通用信息。一旦編譯使用泛型的代碼,由於type erasure,泛型信息將丟失。

2

不知道任何其他的可能性,但我們使用

public class Books extends SearchResult<Book> { 

} 

工作得很好(只要你沒有太多的不同類型)。

1

使用@XmlTransient@XmlElement

讓你的通用結果類抽象和resultList @XmlTransient和保護。

public abstract class SearchResult<T> {   

    protected List<T> content; 

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

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

然後創建一個子類,吸氣劑使用@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; 
    } 

}