Envoltura de excepción JAX-RS CXF
Frecuentes
Visto 2,490 equipos
1
Me gustaría agregar un ExceptionMapper a CXF (2.6.1) que no solo comunica el código de respuesta, sino que también envía la excepción en el formato de carga útil (estoy usando JSON por ahora).
@Provider
public class CustomExceptionMapper
implements
ExceptionMapper<MyException>
{
...
@Override
public Response toResponse(MyException mex)
{
//I need something here which can convert mex object to JSON and ship it in response
// I want this to be de-serialized on client
//the following returns the status code
return Response.status(Response.Status.BAD_REQUEST).build();
}
...
}
Hay alguna forma de hacer esto ?
1 Respuestas
1
Es posible que deba usar @Produces para serializar su objeto en JSON como:
@Produces(MediaType.APPLICATION_JSON)
Y entonces return Response.ok().entity(OBJECT).build();
La forma en que puede probar su servicio:
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(getBaseURI());
ClientResponse response = service.path(ADDRESS).type("application/json").get(ClientResponse.class);
String s = response.getEntity(String.class);
System.out.println(s);
private static URI getBaseURI() {
return UriBuilder.fromUri(SERVER ADDRESS).build();
}
Respondido 27 Jul 12, 18:07
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java cxf jax-rs cxfrs or haz tu propia pregunta.
Gracias por la respuesta. Pero me gustaría devolver el estado 500 o 400 pero no el 200. ¿Hay alguna manera de eso? - Chris
Lo averigué. Es así Response.ok(mex,MediaType.APPLICATION_JSON).status(Response.Status.BAD_REQUEST).build(); - Chris
En el lado del cliente, ¿tengo que agregar un interceptor? Parece que una respuesta que no es 200 se está bloqueando en mi servlet: Chris
No, no se debe bloquear. ¿Está utilizando Tomcat como su servlet? - Ali
Sí, es gato. y sí... Obtengo una excepción del tipo org.apache.cxf.jaxrs.client.ServerWebApplicationException ¿Cómo obtengo "MyException"? - Chris