Resteasy-支持JBoss AS 7和Wildfly

Resteasy-支持JBoss AS 7和Wildfly,jboss,jboss7.x,resteasy,wildfly,Jboss,Jboss7.x,Resteasy,Wildfly,在我们的项目中,我们必须同时支持JBossAS7.1.3和Wildfly。 为了提供这种可能性,我们有两个具有不同依赖项和版本的maven概要文件,它们在AS中提供。 一切都很好,但最近我们在JBoss中遇到了问题,与Resteasy连接 我们的REST服务带有@ConsumesMediaType.APPLICATION\u JSON注释 但是,如果我们在未设置内容类型头字段的情况下发出PUT请求,我们将得到404状态的响应。 我们期望得到415个不支持的媒体类型的响应,所以我们编写了拦截器来检

在我们的项目中,我们必须同时支持JBossAS7.1.3和Wildfly。 为了提供这种可能性,我们有两个具有不同依赖项和版本的maven概要文件,它们在AS中提供。 一切都很好,但最近我们在JBoss中遇到了问题,与Resteasy连接

我们的REST服务带有@ConsumesMediaType.APPLICATION\u JSON注释

但是,如果我们在未设置内容类型头字段的情况下发出PUT请求,我们将得到404状态的响应。 我们期望得到415个不支持的媒体类型的响应,所以我们编写了拦截器来检查媒体类型,并在未设置的情况下抛出UnsupportedMediaTypeException

在Wildfly中,这个问题是固定的,所以我们不需要这个拦截器

主要的问题是Resteasy的主要版本与Wildfly不同- JBoss 7.1.3中的3.0.8.Final是2.3.3.Final,存在一些不兼容的更改

例如,我们的拦截器实现了org.jboss.resteasy.spi.interception.PreProcessInterceptor,该拦截器在resteasy 3.0.8中被标记为弃用,并且其预处理方法的签名自resteasy 2.3.3以来发生了变化

2.3.3的Preprocessor.preProcess签名:

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

另外,我们有interop模块来提供在这些平台中不同的类,例如具有不同的包名。

最后,我提出了以下解决方案:

创建我自己的界面 公共接口MyPreProcessInterceptor扩展了PreProcessInterceptor { //Restesy 2.3.3的方法签名 ServerResponse预处理HttpRequest请求,ResourceMethod 抛出失败,WebApplicationException

//method signature for Restesy 3.0.8
ServerResponse preProcess(HttpRequest request, ResourceMethodInvoker method)
        throws Failure, WebApplicationException;
}

在Wildfly的互操作中创建ResourceMethod类

在JBoss AS 7.1.3的互操作中创建ResourceMethodInvoker类 修改MyInterceptor以实现新接口MyPreProcessInterceptor 仅在Restesy 2.3.3的方法中实现必要的逻辑,只返回null;对于3.0.8
因此,现在它可以编译并适用于两种平台。

不幸的是,升级Resteasy不是一个选项,因为我们无法直接访问客户的系统,并且out app不是唯一使用Resteasy的应用程序。