Возврат универсального типа в 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;
    }

}
Другие вопросы по тегам