JBoss模块很糟糕,无法在JBoss 7下使用自定义Resteasy / JAX-RS
由于JBoss EAP 6.1 / AS 7.2.0是模塊化的,并且您可以排除Web應(yīng)用程序可見的模塊,因此您希望可以輕松地忽略內(nèi)置的JAX-RS實(shí)現(xiàn)(Rest Easy 2.3.6)并使用它。自定義的(3.0.6)。 但是,可悲的是,事實(shí)并非如此。 您必須遵守官方指南的建議,即在全球范圍內(nèi)升級(jí)Rest Easy –前提是服務(wù)器上運(yùn)行的其他Web應(yīng)用程序均不會(huì)因升級(jí)而中斷。
這應(yīng)該足以排除內(nèi)置的Rest Easy,并能夠使用webapp中包含的版本:
但是,它遠(yuǎn)沒有奏效。 這幾乎可以完成工作(盡管其中的少數(shù)排除可能是不必要的):
<!--?jboss-deployment-structure.xml --> <?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure><deployment><exclude-subsystems><subsystem name="resteasy"/></exclude-subsystems><exclusions><module name="org.apache.log4j" /><module name="org.apache.commons.logging"/><module name="org.jboss.as.jaxrs"/><module name="org.jboss.resteasy.resteasy-jaxrs"/><module name="org.jboss.resteasy.resteasy-cdi"/><module name="org.jboss.resteasy.jackson-provider"/><module name="org.jboss.resteasy.resteasy-atom-provider"/><module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/><module name="org.jboss.resteasy.resteasy-jaxb-provider"/><module name="org.jboss.resteasy.resteasy-jettison-provider"/><module name="org.jboss.resteasy.resteasy-jsapi"/><module name="org.jboss.resteasy.resteasy-multipart-provider"/><module name="org.jboss.resteasy.resteasy-yaml-provider"/><module name="org.codehaus.jackson.jackson-core-asl"/><module name="org.codehaus.jackson.jackson-jaxrs"/><module name="org.codehaus.jackson.jackson-mapper-asl"/><module name="org.codehaus.jackson.jackson-xc"/><module name="org.codehaus.jettison"/><module name="javax.ws.rs.api"/></exclusions></deployment></jboss-deployment-structure>但是,只有近。 問題是排除javax.ws.rs.api無效。 似乎不能排除核心Java EE API。 死路。
順便說一句,這是我最后與jax-rs相關(guān)的依賴項(xiàng):
// resteasyVersion = '3.0.6.Final' compile group: 'org.jboss.resteasy', name: 'jaxrs-api', version: resteasyVersion compile group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: resteasyVersion compile group: 'org.jboss.resteasy', name: 'resteasy-jackson2-provider', version: resteasyVersion // JSONP compile group: 'org.jboss.resteasy', name: 'async-http-servlet-3.0', version: resteasyVersion // Required at runtime compile group: 'org.jboss.resteasy', name: 'resteasy-servlet-initializer', version: resteasyVersion // Required at runtime失敗嘗試的大概歷史
我不再記得我經(jīng)歷過的所有死胡同,但是這里是我在部署或運(yùn)行??時(shí)遇到的異常的大致概述。
java.lang.ClassNotFoundException: org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher–通過將org.jboss.resteasy:async-http-servlet-3.0:3.0.6.Final到依賴項(xiàng)進(jìn)行org.jboss.resteasy:async-http-servlet-3.0:3.0.6.Final
java.lang.ClassCastException: myapp.rs.RestApplication cannot be cast to javax.servlet.Servlet–通過將org.jboss.resteasy:resteasy-servlet-initializer:3.0.6.Final到依賴項(xiàng)進(jìn)行org.jboss.resteasy:resteasy-servlet-initializer:3.0.6.Final
java.lang.NoSuchMethodError: org.jboss.resteasy.spi.ResteasyProviderFactory.<init>(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)V–通過將更多的RestEasy / Jackson模塊添加到排除列表中可能修復(fù)
java.lang.NoSuchMethodError: org.jboss.resteasy.specimpl.BuiltResponse.getHeaders()Ljavax/ws/rs/core/MultivaluedMap;–這是無法解決的最終問題; 問題是, BuiltResponse從resteasy-jaxrs從繼承javax.ws.rs.core.Response不過的版本從這個(gè)類JAXRS-API 3.0.6.Final.jar是有利于忽略Response從JAX-RS 1.1 javax.ws.rs.api模塊( /jboss-eap-6.1.0/modules/system/layers/base/javax/ws/rs/api/main/jboss-jaxrs-api_1.1_spec-1.0.1.Final-redhat-2.jar ),它缺少getHeaders方法,并且如上所述,不能將其排除。 (感謝allprog暗示了這一沖突 !)
結(jié)論
使用較新的JAX-RS的唯一方法是升級(jí)JBoss模塊。 如果那會(huì)破壞其他Web應(yīng)用程序,那么您將陷入困境。
經(jīng)驗(yàn)教訓(xùn):具有大量現(xiàn)成的,集成良好的功能(?)的應(yīng)用程序服務(wù)器似乎很有吸引力,但是當(dāng)您遇到?jīng)_突的庫和類加載問題時(shí),它們的價(jià)值會(huì)Swift下降。 從長遠(yuǎn)來看,從您完全控制的簡單事物(例如Jettty)開始,也許是一個(gè)更好的解決方案。 另外,在同一臺(tái)服務(wù)器上運(yùn)行多個(gè)Web應(yīng)用程序在2000年也許很聰明,但如今已不值得一試。 我們擁有足夠的磁盤空間和內(nèi)存,因此庫的重用并不重要,并且能夠在一處管理所有應(yīng)用程序的全局設(shè)置的能力當(dāng)然是更好的選擇。 微服務(wù)FTW!
翻譯自: https://www.javacodegeeks.com/2014/02/jboss-modules-suck-its-impossible-to-use-custom-resteasyjax-rs-under-jboss-7.html
總結(jié)
以上是生活随笔為你收集整理的JBoss模块很糟糕,无法在JBoss 7下使用自定义Resteasy / JAX-RS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么要在Java SE 7的数字中使用
- 下一篇: 突袭4操作快捷键大全(突袭4操作快捷键大