Resteasy - 支持JBoss AS 7和Wildfly

时间:2014-10-27 05:53:14

标签: jboss jboss7.x resteasy wildfly

我们必须在我们的项目中支持JBoss AS 7.1.3和Wildfly。 为了提供这种可能性,我们有两个具有不同依赖关系和版本的maven配置文件,它们在AS中提供。 一切正常,但最近我们遇到了JBoss的问题,与Resteasy有关。

我们的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中被标记为Deprecated,并且它的preProcess方法的签名自Resteasy 2.3.3以来已经改变。

2.3.3的PreProcessInterceptor.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

P.S。我们有互操作模块来提供这些平台中不同的类,例如有不同的包名。

1 个答案:

答案 0 :(得分:0)

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

  1. 创建我自己的界面 public interface MyPreProcessInterceptor extends PreProcessInterceptor { //method signature for Restesy 2.3.3 ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws Failure, WebApplicationException;

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

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

  2. 在Wildfly

  3. 的互操作中创建} 课程
  4. 在JBoss AS 7.1.3的互操作中创建ResourceMethod
  5. 修改ResourceMethodInvoker以实施新界面MyInterceptor
  6. 仅在Restesy 2.3.3的方法中实现必要的逻辑,而仅在MyPreProcessInterceptor for 3.0.8
  7. 中实现必要的逻辑

    现在它现在可以编译并适用于两个平台。