我有一个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对象提供.