我們必須在我們的項目中同時支持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.我們有互操作模塊來提供這些平臺中不同的類,例如有不同的軟件包名稱。
不幸的是升級Resteasy不是一種選擇,因爲我們沒有直接訪問客戶的系統,而且不是唯一一個使用Resteasy的應用程序。 – dds 2014-10-28 03:46:50