CXF Rest Client - 为POJO设置ResponseReader(JAXBElement)

时间:2012-07-17 16:26:51

标签: java rest serialization jaxb cxf

我想用我的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. 什么是正确的代码才能让实体退出响应?
  3. 我的服务如下:

        @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.
    

1 个答案:

答案 0 :(得分:0)

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

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