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

标签 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。但是,来自客户端的“类型”列表的大小为 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;
    }
}

最佳答案

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

解决方法是引入一个setList() setter 并从无参数构造函数抛出运行时异常。

关于cxf - 从 JAX-RS/CXF 服务返回时集合为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11057371/

相关文章:

jakarta-ee - JAX-RS 中未发生 @Resource 注入(inject)

java - 我应该将我的 Angular 文件放在同一个 JEE 项目中吗?

java - 使用 Spring Security 核心插件时处理 REST API 调用

cxf - SoapFault MustUnderstand header ,CXF WSS4J 未提供加密属性文件

java - 如何以编程方式将webservice发布到tomcat

java - 带有 cxf 拦截器和回调处理程序的 jax-rs

java - 如何在 Apache Wink 客户端中对请求进行 "Preview"

java - Apache CXF WSDL 解析

java - 表单的 CXF 方法声明

java - Apache Jax-RS 破坏了 spring-integration-mail