2


2

WebServiceでジェネリック型を返す

私はWebサービスに精通しています。 このようなバリューホルダーとしてジェネリッククラスを作成しました。

public class SearchResult {
    private List resultSet;
}

次に、Webサービスメソッドを記述します。

public SearchResult getSearchResult(){
    ...
}

クライアントファイルを生成するためにmaven-jaxws-pluginを使用していたときに、ジェネリック型情報がなくなっていることがわかりました。 彼らは次のように見えました:

public class SearchResult {
   private List resultSet;
}

public SearchResult getSearchResult(){
    ...
}

ここでの私の質問は、jaxwsはそのような種類の一般的な型情報を保持できるのかということです。 Listを戻り値の型として試しましたが、動作します。 ご協力ありがとうございます。

3 回答


2


他の可能性は不明ですが、使用しています

public class Books extends SearchResult {

}

非常にうまく機能します(種類が多すぎない限り)。


1


クライアントコードがソース以外を使用して生成された場合、一般的な情報は含まれない可能性があります。 ジェネリックスを使用するコードがコンパイルされると、ジェネリックに関する情報はhttp://java.sun.com/docs/books/tutorial/java/generics/erasure.html[type erasure]により失われます。


1


@ XmlTransient`と @ XmlElement`を使用します

汎用の結果クラスを抽象化し、resultListを `@ XmlTransient`およびprotectedにします。

public abstract class SearchResult {

    protected List content;

    @XmlTransient
    public abstract List getContent();

    public abstract void setContent(List content);
}

次に、サブクラスを作成し、ゲッターで `@ Xmlelement`を使用します。

public class BookResult extends SearchResult {

    private static final long serialVersionUID = 1L;

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

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

}