java – JAX-RS将实体作为JAXB对象和String

我有一个JAX-RS Web服务(使用jersey),它接受一个JAXB对象作为请求实体.当我们收到错误时,我们要记录发送给我们的原始xml字符串.目前,我只是重新编组JAXB对象,但由于我们在这些类中有几个
java枚举,因此原始xml字符串中拼写错误的枚举值将丢失,这对于我们的目的是不可接受的.

有没有人知道将请求实体作为字符串和JABX对象的方法?我宁愿不编写自定义的MessageBodyReader,如果可能的话,我宁愿不尝试为JAXB获取MessageBodyReader.您也可以自由使用特定于球衣的课程.我们使用的是1.0.x版.

最佳答案 事实证明,使用JAX-RS API并不难.这是我做的:

@Path("/transactions")
public class TestResource<X> {

    private Class<X> jaxbClass;

    @POST
    @Path("/{transaction-id}")
    @Consumes("application/xml")
    public Response processPost(@Context Providers providers, @Context HttpHeaders httpHeaders, @PathParam("transaction-id") final long transactionId,
            final String xmlString) throws WebApplicationException, IOException {

        MessageBodyReader<X> reader = providers.getMessageBodyReader(jaxbClass, null, null, MediaType.APPLICATION_XML_TYPE);
        InputStream entityStream = new ByteArrayInputStream(xmlString.getBytes());
        final X xmlObject = reader.readFrom(jaxbClass, null, null, MediaType.APPLICATION_XML_TYPE, httpHeaders.getRequestHeaders(), entityStream);

        //insert logic here

        return Response.ok().build();
    }
}

这将只需几行代码即可将xml作为字符串和JAXB对象提供.

点赞