【问题标题】:CXF Rest Client - set ResponseReader for POJO (JAXBElement)CXF Rest Client - 为 POJO (JAXBElement) 设置 ResponseReader
【发布时间】:2012-07-17 16:26:51
【问题描述】:

我想用我的 CXF Rest Client 传输一个 POJO 对象。它已经适用于 JAXB 注释对象。所以我做了很多尝试。

我试过了

 reader.setEntityClass(ObjectPOJO.class);

类似的东西

 reader.setEntityClass(JAXBElement<ObjectPOJO>.class);

两者都不起作用。对于第二次尝试,代码是错误的。我没有得到它来将实体类设置为 jaxbelement。也许它适用。

发送对象后:

 Response response = client.path(PATH).post(new JAXBElement<ObjectPOJO>(new QName("pojo"), ObjectPOJO.class, pojoObject));

我试图通过不同的尝试来获取我的实体。比如:

 ObjectPOJO pojo = ((JAXBElement<TenantPOJO>) res.getEntity()).getValue();
  1. 有人知道我是否必须注册 ObjectPOJO.class 或 JAXBElement.class。如果第二次尝试是正确的,那么它在代码中的表现如何?
  2. 从响应中取出实体的正确代码是什么?

我的服务如下所示:

    @POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response postPojo(JAXBElement<ObjectPOJO> pojo);

编辑:

错误

 ERROR org.apache.cxf.jaxrs.client.AbstractClient - .Problem with reading the response message, class : class javax.ws.rs.core.Response, ContentType : application/xml.

【问题讨论】:

    标签: java rest serialization jaxb cxf


    【解决方案1】:

    要在 rest 客户端和 rest 服务之间传输对象 (PoJos),不需要使用显式 JAXB 转换来传输它。如果传输对象是 JAXB 注释对象,则 Jersey 容器负责必要的转换。

    Response response = client.path(PATH).post(postObject);
    @XmlRootElement
    public class PostObject
    {
    ////
    }
    

    【讨论】:

    • 我不使用 Jersey,它是 Apache CXF。我想传输一个 Pojo,而不是一个 Jaxb 注释对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多