3

次のように定義されたサービスメソッドがあります。

public JaxbList<Deal> getDeal() {
    List<Deal> deals = new ArrayList<Deal>();
    Deal type = new Deal();
    type.setDealID(1);
    type.setName("June Discounts");
    deals.add(type);
    JaxbList list = new JaxbList(deals);
    System.out.println("List size -> " + list.getList().size());
    return list;
}

私のクライアントは次のように定義されています。

WebClient client = WebClient.create("....");
    JaxbList deals = client.path("exampleservice/getDeal")
        .accept("application/xml").get(JaxbList.class);

    List<Deal> types = deals.getList();

サービス メソッドでコレクションのサイズを出力すると、結果は 1 として返されます。しかし、クライアントからの「タイプ」リストのサイズは 0 です。ブラウザで開くと、1 取引が表示されます。したがって、この問題は私のクライアントのようです。どこにあるのかわからないけど。

アイデア?

これが私の JaxbList クラスです。

public class JaxbList<T>{
    protected List<T> list;

    public JaxbList(){}

    public JaxbList(List<T> list){
        System.out.println("Setting list...");
        this.list=list;
    }

    @XmlElement(name="Item")
    public List<T> getList(){
        return list;
    }
}
4

1 に答える 1

0

上記の KasunBG で述べたように、public JaxbList(List<T> list)コンストラクターは JAXB によって呼び出されることはありません。代わりにデフォルトの引数なしのものが使用されます ( What JAXB needs a public no-arg constructor for? の議論を参照してください)。実際、Java コンパイラーは、2 つのコンストラクターと「初期化されていないフィールドlist」を使用して、この状況について文句を言う必要があります。

解決策は、セッターを導入し、setList()引数なしのコンストラクターから実行時例外をスローすることです。

于 2012-12-05T12:26:17.033 に答える