2011-01-31 8 views
5

Ho scritto un intercettore personalizzato che esegue alcuni parametri di convalida. Voglio essere in grado di restituire un codice di errore e serializzare una classe con annotazione JAXB come corpo della risposta.Apache CXF: come restituire la risposta di errore di un intercettore

Se lancio una WebApplicationException, non ha alcuna elaborazione speciale eseguita per serializzare l'oggetto Response all'interno (il che ha senso, presumo che sia fatto da un altro intercettore).

Come dovrei arrestare la catena di intercettazione ma devo ancora serializzare JAXB l'entità di risposta?

risposta

3

Beh, almeno nel flusso intercettore CXF-RS JAX, se si imposta:

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

... quindi il servizio effettivo non ottiene invocato, mentre le altre fasi ottengono invocate. Non hanno scavato dentro al codice di CXF per vedere dove che i calci di logica in

Così ho costruito una risposta come questa:.

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

Ho anche qualche autenticazione personalizzata in esecuzione in un CXF JAX-RS filtro e voglio solo controllare i parametri quando l'autenticazione è a posto, quindi ho impostato la mia classe di intercettazione dei parametri per l'esecuzione durante la fase PRE_INVOKE.

+0

Ma in questo modo non funziona se lavoriamo con il protocollo SOAP. Qualcuno potrebbe fornire aggiornamenti per il caso SOAP? –

Problemi correlati