Apache CXF: как вернуть ответ об ошибке от перехватчика

Я написал собственный перехватчик, который выполняет проверку некоторых параметров. Я хочу иметь возможность возвращать код ошибки и сериализовать класс с аннотациями JAXB в качестве тела ответа.

Если я выбрасываю исключение WebApplicationException, в нем не выполняется никакой специальной обработки для сериализации объекта Response внутри (что имеет смысл; я предполагаю, что это выполняется другим перехватчиком).

Как мне остановить цепочку перехватчиков, но при этом JAXB сериализует объект ответа?


person Nick Spacek    schedule 31.01.2011    source источник


Ответы (1)


Ну, по крайней мере, в потоке перехватчика CXF JAX-RS, если вы установите:

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

... тогда фактическая служба не вызывается, в то время как другие фазы вызываются. Не копался в коде CXF, чтобы увидеть, где эта логика срабатывает.

Поэтому я построил ответ следующим образом:

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

У меня также есть некоторая пользовательская аутентификация, работающая в фильтре CXF JAX-RS, и я хочу проверять параметры только тогда, когда аутентификация в порядке, поэтому я настроил свой класс перехватчика параметров на выполнение во время фазы PRE_INVOKE.

person Nick Spacek    schedule 01.02.2011
comment
Но этот способ не работает, если мы работаем с протоколом SOAP. Может ли кто-нибудь предоставить обновления для случая SOAP? - person Alex Orlov; 20.11.2017