实现CXF客户端以从REST服务器读取LIST

时间:2015-07-01 14:59:27

标签: web-services rest java-ee cxf cxf-client

我正在尝试使用Apache CXF实现一个休息Web服务,我希望将对象列表作为服务器的响应返回。所以我使用通用实体将我的列表包装在服务器上,当我从浏览器输入路径时一切正常。它打印对象的XML表示,因为我使用了Jackson JAX-B但是当我尝试使用JAX-RS客户端时。我正在例外。

  

线程中的异常" main" javax.ws.rs.client.ResponseProcessingException:读取数据时出现问题,类XYZ,ContentType: / 。       at org.apache.cxf.jaxrs.impl.ResponseImpl.reportMessageHandlerProblem(ResponseImpl.java:433)       at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:378)       at org.apache.cxf.jaxrs.impl.ResponseImpl.readEntity(ResponseImpl.java:325)       at org.apache.cxf.jaxrs.impl.ResponseImpl.readEntity(ResponseImpl.java:313)       在XYZ.ABC()       在XYZ.ABC()   引起:javax.ws.rs.core.NoContentException:消息体为空       在org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.reportEmptyContentLength(AbstractJAXBProvider.java:276)       at org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:166)       at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1325)       at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:369)       ......还有4个

我编写了以下客户端代码以从服务器 final Client client = ClientBuilder.newClient(); WebTarget webTarget = client.target(URI.create(PATH)); Response response = webTarget.request(MediaType.APPLICATION_XML).get(); List<ABC> obj = response.readEntity(new GenericType<List<ABC>> (ABC.class){});

获取数据

但除此之外,我尝试了许多代码来实现CXF客户端并从服务器获取数据,但我几乎一直都得到同样的异常。我也尝试过JAXRSCLIENTFactory来实现客户端,但同样的例外。

1 个答案:

答案 0 :(得分:0)

我在使用CXF客户端进行解组时遇到了同样的问题。我是这样做的:

  1. 将响应读入字符串。
  2. 使用Gson从字符串转换为对象列表。
  3. 注意:您需要一个包含对象列表的包装类。

    实施例

    如果服务器返回产品列表,以下是解组列表的方法:

    创建包装类

    public class ProductList {  
    
    private List<Product> products;
    
    public List<Product> getProducts() {
        return products;
    }
    
    public void setProducts(List<Product> products) {
        this.products = products;
    }
    
    }
    

    要解组的代码

    String responseBody = response.readEntity(String.class);
    ProductList productList = new Gson().fromJson(responseBody, ProductList.class);
    if(productList.getProducts() != null)
        return productList.getProducts();