从JAX-RS / CXF服务返回时,集合为空

时间:2012-06-15 19:55:46

标签: cxf jax-rs

我的服务方法定义为:

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.但是,来自客户端的'types'列表的大小为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;
    }
}

1 个答案:

答案 0 :(得分:0)

如上所述KasunBG,JAXB永远不会调用public JaxbList(List<T> list)构造函数。使用默认的no-arg one(参见What JAXB needs a public no-arg constructor for?处的一些讨论)。实际上,Java编译器应该使用两个构造函数和“从未初始化字段list”来抱怨这种情况。

解决方案是引入setList() setter并从no-arg构造函数中抛出运行时异常。