我正在尝试使用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来实现客户端,但同样的例外。
答案 0 :(得分:0)
我在使用CXF客户端进行解组时遇到了同样的问题。我是这样做的:
注意:您需要一个包含对象列表的包装类。
如果服务器返回产品列表,以下是解组列表的方法:
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();