Мы используем cxf версии 2.5.2 и выставляем и используем несколько успокоительных веб-сервисов, используя cxf jaxrs.
Есть идеи, как генерировать исключения от сервера к клиенту?
Я попытался определить пользовательский сопоставитель исключений, реализовав интерфейс ExceptionMapper (метод toResponse) и добавил bean-компонент в cxf jaxrs: список поставщиков серверов.
Клиентская часть: Реализован ResponseExceptionMapper (метод fromResonse) и добавлен bean-компонент в cxf jaxrs: список поставщиков клиентов. Но это не похоже на работу.
Исключение - это пользовательское исключение, расширяющее java.lang.Exception.
Получил "IllegalAnnotationsException 2 подсчета IllegalAnnotationExceptions StackTraceElement не имеет конструктора по умолчанию без аргументов"
Найдено http://java.net/jira/browse/JAXB-814 и обновление до jaxb-impl 2.2.5 решило эту проблему.
Но в конце я поражен следующим исключением на стороне сервера (во время вызова клиента):
org.apache.cxf.jaxrs.provider.AbstractJAXBProvider :
com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions blueprints.common.util.BlueprintsException does not have a no-arg default constructor"
и на стороне клиента:
JAXBException occurred : 1 counts of IllegalAnnotationExceptions.
java.lang.ClassCastException: org.apache.cxf.helpers.LoadingByteArrayOutputStream$1 cannot be cast to myExceptionClass:java.lang.ClassCastException" when i typecast Response.getEntity()) tp myExceptionClass in fromResponse (jaxrs provider that implements ResponseExceptionMapper)
Кто-нибудь еще сталкивался с подобными проблемами?
Нужно ли добавлять нестандартные перехватчики? Документ cxf не предоставляет пример для обработки исключений с использованием Spring config.
Редактировать на основе комментария Джигара:
После добавления конструктора по умолчанию сущность в ответе содержит
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<blueprintsServiceException>
<stackTrace/>
<stackTrace/>
<stackTrace/>
<stackTrace/>
...
</blueprintsServiceException>`
и я все еще получаю java.lang.ClassCastException:
org.apache.cxf.helpers.LoadingByteArrayOutputStream$1 cannot be cast to blueprints.server.exception.BlueprintsServiceException' when i typecast Response.getEntity()) to myExceptionClass in fromResponse
(jaxrs provider that implements ResponseExceptionMapper)
Спасибо
Гаятри