Возврат универсального типа в WebService
Я зеленая рука в веб-сервисе. Я написал обобщенный класс в качестве держателя значения следующим образом:
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 ответа
Если код клиента генерируется с использованием чего-либо кроме источника, он, скорее всего, не будет содержать общую информацию. После компиляции кода с использованием обобщений информация об обобщениях теряется из-за стирания типов.
Не уверен ни в каких других возможностях, но мы используем
public class Books extends SearchResult<Book> {
}
Работает довольно хорошо (если у вас не слишком много разных типов).
Использование @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;
}
}