2011-01-31 6 views
5

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

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

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

ответ

3

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

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.

+0

Но этот способ не работает, если мы работаем с протоколом SOAP. Может ли кто-нибудь запросить обновления для случая SOAP? –