2011-01-31 33 views
5

He escrito un interceptor personalizado que realiza la validación de algunos parámetros. Deseo poder devolver un código de error y serializar una clase anotada JAXB como cuerpo de respuesta.Apache CXF: cómo devolver la respuesta de falla desde un interceptor

Si lanzo una WebApplicationException, no tiene ningún procesamiento especial para serializar el objeto Response dentro (lo cual tiene sentido, supongo que lo hace otro interceptor).

¿Cómo debo proceder para detener la cadena del interceptor pero todavía tengo JAXB serializando la entidad de respuesta?

Respuesta

3

Bueno, al menos en el flujo interceptor CXF JAX-RS, si establece:

message.getExchange().put(Response.class, response); 

... entonces el servicio real no recibe invoca, mientras que las otras fases se deje invocados. No se han excavado en el código de CXF para ver donde que se inicia en la lógica

Así que construyen una respuesta como esta:.

Response response = Response 
    .status(Response.Status.FORBIDDEN) 
    .entity(new ErrorEntity("This is a JAXB object with an error string")) 
    .build(); 

que también tienen algunas de autenticación personalizado que se ejecuta en un filtro de CXF JAX-RS y solo quiero verificar los parámetros cuando la autenticación es correcta, por lo que configuro la clase de interceptor de parámetros para que se ejecute durante la fase PRE_INVOKE.

+0

Pero de esta manera no funciona si trabajamos con el protocolo SOAP. ¿Podría alguien proporcionar actualizaciones para el caso SOAP? –

Cuestiones relacionadas