2014-10-27 100 views
0

我們必須在我們的項目中同時支持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

在Wild this中這個問題是固定的,所以我們不需要這個攔截器。

主要問題是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,並且自Resteasy 2.3.3以來它的簽名是preProcess方法已經改變。

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.我們有互操作模塊來提供這些平臺中不同的類,例如有不同的軟件包名稱。

+0

不幸的是升級Resteasy不是一種選擇,因爲我們沒有直接訪問客戶的系統,而且不是唯一一個使用Resteasy的應用程序。 – dds 2014-10-28 03:46:50

回答

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; 
    

    }

  2. 在互操作創建ResourceMethod類Wildfly

  3. 在互操作爲創建ResourceMethodInvoker類JBoss AS 7.1.3
  4. 修改MyInterceptor來實現n EW接口MyPreProcessInterceptor
  5. 只在Restesy 2.3.3的方法實現了必要的邏輯,只要return null;爲3.0.8

所以現在它編譯現在對於這兩個平臺的作品。