Мы должны поддерживать JBoss AS 7.1.3 и Wildfly в нашем проекте. Для обеспечения этой возможности у нас есть два профиля maven с различными зависимостями и версиями, которые предоставляются в AS. Все работает нормально, но в последнее время мы столкнулись с проблемой в JBoss, связанной с Resteasy.Resteasy - поддержка JBoss AS 7 и Wildfly
Наши услуги REST аннотируются @Consumes(MediaType.APPLICATION_JSON)
.
Но если мы, например. сделанный PUT
запрос без Content-Type
поле заголовка, мы получаем ответ с 404
. Мы ожидаем отклик с 415 Unsupported Media Type
, поэтому мы написали перехватчик, чтобы проверить MediaType
и выбросить UnsupportedMediaTypeException
, если он не установлен.
В Wildfly эта проблема исправлена, поэтому нам не нужен этот перехватчик.
Основная проблема заключается в том, что основная версия Resteasy отличается от Wildfly - 3.0.8.Final (в JBoss 7.1.3 это было 2.3.3.Final), и есть некоторые несовместимые изменения.
E.g. наш перехватчик реализует org.jboss.resteasy.spi.interception.PreProcessInterceptor
, который помечен как «Устаревший в Resteasy 3.0.8», а его подпись preProcess
изменилась с момента Resteasy 2.3.3.
Подпись PreProcessInterceptor.preProcess
для 2.3.3:
ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws Failure, WebApplicationException;
и 3.0.8:
ServerResponse preProcess(HttpRequest request, ResourceMethodInvoker method) throws Failure, WebApplicationException;
Таким образом, наш перехватчик даже не скомпилируется для Wildfly.
Вопрос в том, как решить эту проблему, чтобы сделать код компилируемым для JBoss AS 7.1.3/Wildfly и не использовать этот перехватчик в Wildfly?
Перехватчик зарегистрирован с помощью аннотаций:
@Provider
@ServerInterceptor
public class MyInterceptor implements PreProcessInterceptor
P.S. У нас есть модуль interop для предоставления классов, которые отличаются на этих платформах, например. имеют разные имена пакетов.
К сожалению, обновление Resteasy не является вариантом, потому что у нас нет прямого доступа к системам заказчика, и приложение не является единственным, кто использует Resteasy. – dds