2011-01-31 22 views
5

Napisałem niestandardowy przechwytywacz, który dokonuje weryfikacji niektórych parametrów. Chcę być w stanie zwrócić kod błędu i serializować klasę z adnotacją JAXB jako treść odpowiedzi.Apache CXF: jak zwrócić odpowiedź o błędzie z przechwytywacza

Jeśli wyrzucam wyjątek WebApplicationException, nie jest wykonywany żaden specjalny proces przetwarzania, aby serializować obiekt odpowiedzi w środku (co ma sens, zakładam, że robi to inny przechwytujący).

Co powinienem zrobić, aby zatrzymać łańcuch przechwytywania, ale nadal JAXB ma szeregować obiekt odpowiedzi?

Odpowiedz

3

Cóż, przynajmniej w przepływie przechwytujących CXF JAX-RS, jeśli ustawisz:

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

... wtedy rzeczywista usługa nie uzyskać wywołany, natomiast pozostałe fazy daj się powoływać. Nie wykopane z kodem CXF aby zobaczyć, gdzie rzuty że logika

Więc zbudowany odpowiedź tak.

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

Mam też pewne niestandardowe uwierzytelnianie działa w CXF JAX-RS filtrem i chcę tylko sprawdzić parametry, gdy uwierzytelnianie jest w porządku, więc ustawiłem klasę przechwytywania parametrów, aby działała podczas fazy PRE_INVOKE.

+0

Ale ten sposób nie działa, jeśli pracujemy z protokołem SOAP. Czy ktoś mógłby podać aktualizacje dla sprawy SOAP? –

Powiązane problemy