如何将JAXBElement编组为Response?

时间:2017-01-12 20:59:38

标签: java rest jaxb cxf

我的split/2提供的CXF服务通常会返回REST,通常会将结果实体数据封装为XML并返回代码:

javax.ws.rs.core.Response

要求@GET @Path("/getPojo") @Produces("application/xml") public Response getPojo() { SomePojo resultObj = ...; Response result = Response.status(200).entity(resultObj).build(); return result; } 包含正确的注释:

SomePojo

但是,现在我面临的情况是注释约定对我不起作用,我必须构建自己的@XmlRootElement(name = "somePojo") @XmlAccessorType(XmlAccessType.FIELD) public class SomePojo implements Serializable { ... } 。如何在JAXBElement中包含自定义封送的JAXBElement,而不是使用依赖于注释配置的Response?我正在编组类似于解释here的内容,但他只是将封送的XML打印到控制台中,我想将其打印到响应中(而不仅仅是Response.ResponseBuilder.entity(resultObj))。

1 个答案:

答案 0 :(得分:1)

您可以使用自定义编组程序对xml进行编组,并将结果XML设置为Response的实体,StringInputStream

@GET
@Path("/getXML")
@Produces("application/xml")
public Response getXML() {

    String xml = // custom marshall

    Response result = Response.
           status(200).
           entity(xml).
           type("application/xml").
           build();

    return result;
}