由于JBoss EAP 6.1 / AS 7.2.0是模块化的,并且您可以排除Webapp可见的模块,因此您希望可以轻松地忽略内置的JAX-RS实现(Rest Easy 2.3.6)并使用它。自定义的(3.0.6)。 但是,可悲的是,事实并非如此。 您必须遵守官方指南的建议,即在全球范围内升级Rest Easy –前提是服务器上运行的其他Web应用程序均不会因升级而中断。

这应该足以排除内置的Rest Easy,并能够使用webapp中包含的版本:

<!-- jboss-deployment-structure.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure><deployment><exclude-subsystems><subsystem name="resteasy"/></exclude-subsystems></deployment></jboss-deployment-structure>

但是,它远没有奏效。 这几乎可以完成工作(尽管其中的少数排除可能是不必要的):

<!-- 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相关的依赖项:

// 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

失败尝试的大概历史

我不再记得我经历过的所有死胡同,但是这里是我在部署或运行​​时遇到的异常的大致概述。

java.lang.ClassNotFoundException: org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher

–通过将org.jboss.resteasy:async-http-servlet-3.0:3.0.6.Final到依赖项进行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到依赖项进行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模块添加到排除列表中可能修复

java.lang.NoSuchMethodError: org.jboss.resteasy.specimpl.BuiltResponse.getHeaders()Ljavax/ws/rs/core/MultivaluedMap;

–这是无法解决的最终问题; 问题是, BuiltResponseresteasy-jaxrs从继承javax.ws.rs.core.Response不过的版本从这个类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暗示了这一冲突 !)

结论

使用较新的JAX-RS的唯一方法是升级JBoss模块。 如果那会破坏其他Web应用程序,那么您将陷入困境。

经验教训:具有大量现成的,集成良好的功能(?)的应用程序服务器似乎很有吸引力,但是当您遇到冲突的库和类加载问题时,它们的价值就会Swift下降。 从长远来看,从您完全控制的简单事物(例如Jettty)开始,也许是一个更好的解决方案。 同样,在同一台服务器上运行多个Web应用程序在2000年也许很聪明,但如今已不值一提。 我们有足够的磁盘空间和内存,因此库的重用并不重要,并且能够在一处管理所有应用程序的全局设置的能力当然是更好的选择。 微服务FTW!

参考: JBoss模块很烂 ,在The Holy Java博客上,无法从JCG合作伙伴 Jakub Holy的JBoss 7下使用自定义Resteasy / JAX-RS 。

翻译自: https://www.javacodegeeks.com/2014/02/jboss-modules-suck-its-impossible-to-use-custom-resteasyjax-rs-under-jboss-7.html

JBoss模块很烂,无法在JBoss 7下使用自定义Resteasy / JAX-RS相关推荐

  1. JBoss模块很糟糕,无法在JBoss 7下使用自定义Resteasy / JAX-RS

    由于JBoss EAP 6.1 / AS 7.2.0是模块化的,并且您可以排除Web应用程序可见的模块,因此您希望可以轻松地忽略内置的JAX-RS实现(Rest Easy 2.3.6)并使用它.自定义 ...

  2. apache camel_在WildFly中将Apache Camel和Spring添加为jboss模块

    apache camel 这些天,我在玩Wildfly , Apache Camel和Spring . 在EAR / WAR之间进行通信的一种简单方法是使用Camel的direct-vm组件. 有或没 ...

  3. 在WildFly中将Apache Camel和Spring添加为jboss模块

    这些天,我在玩Wildfly , Apache Camel和Spring . 在EAR / WAR之间进行通信的一种简单方法是使用Camel的direct-vm组件. 有或没有骆驼,有很多方法可以实现 ...

  4. JBoss模块示例–模块化Web应用程序

    最近,我读了为什么没有标准来开发真正的模块化Web应用程序? 由Patroklos Papapetrou撰写( 在Java Code Geeks中也有介绍 ). 受本文的启发,我决定检查实际使用的JB ...

  5. JBoss 系列八十五: JBoss Modules 简单介绍

    概述 从JBoss AS7开始,Classloader这块开始使用全新的JBoss Modules.本文简单介绍说明JBoss Modules的设计思路,以及给出一个例子说明这一设计思路. JBoss ...

  6. 能说明你的Javascript技术很烂的五个原因

    Javascript 在互联网上名声很臭,但你又很难再找到一个像它这样如此动态.如此被广泛使用.如此根植于我们的生活中的另外一种语言.它的低学习门槛让很多人都称它为学 前脚本语言,它另外一个让人嘲笑的 ...

  7. 《转》十种更好的表达“你的代码写的很烂”的方法

    如果你有一个同事,他写的程序与其说是代码,不如说更像希腊神话中女妖美杜莎的头发,你当然不能熟视无睹,你应该做出一些反应,但你可选的合适的反应方式并没有多少:自己默默的帮他整理清楚.向上级抱怨.向其他同 ...

  8. 阿卡迪亚大学计算机专业好考吗,阿卡迪亚大学很烂吗

    阿卡迪亚大学很烂吗,阿卡迪亚大学是加拿大最古老最著名的大学之一.该校被加拿大最具权威的<麦克林>杂志(Maclean's)评为加拿大最好的本科大学.同时它也是国际公认的学术先锋,获得华盛顿 ...

  9. 假期一周学习计划_我在假期很烂-这周我做了什么

    假期一周学习计划 Well, it seems I'm lousy at vacation. I'm still learning what I'm supposed to do. My wife i ...

最新文章

  1. stm32f103r6最小系统原理图_STM32的最小系统板卡
  2. DNS support edns-client-subnet
  3. vue获取tr内td里面所有内容_vue 项目学习
  4. 区块链和区块链联盟_区块链是安全主题吗?
  5. 抽奖砍价之类以均值为基础的波动算法 demo版本
  6. matlab 识别调试,有关matlab的人脸识别程序,但调试是不成功
  7. 关于Win32 DialogBox的一些收获
  8. vue个人学习(三)----组件
  9. 选工作是一个纠结而又痛苦的过程
  10. 基于RV1126平台imx291分析 --- 运行设备(VIDIOC_STREAMON)
  11. Excel汇总大师破解版 v1.6.8 免安装绿色版 Excel合并拆分
  12. Cesium的坐标拾取
  13. 面试经验之阿里暑期实习
  14. 字节架构师: Kafka 的消费者客户端详解
  15. 论文笔记(九):Assessing the Suitability and ... Mixed Reality Interfaces for Accurate Robot Teleoperation
  16. 【转载】VS2019使用技巧
  17. 深度linux安装cad,在deepin下安装CAD — 原生CAD 看图画图
  18. 人工智能大战苹果缺席 保护用户隐私拖慢其步伐
  19. 基于JAVA口红专卖网站计算机毕业设计源码+数据库+lw文档+系统+部署
  20. COW(寒假每日一题 19)

热门文章

  1. 2021牛客暑期多校训练营1 J-Journey among Railway Stations(线段树+思维转化)
  2. 初一模拟赛总结(4.7)
  3. Codeforces 1176F
  4. Oracle入门(十四.15)之捕获Oracle服务器异常
  5. 快速搭建Springboot项目的两种方式!!
  6. java知识点总结(二)
  7. ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
  8. JS中用构造函数创建对象
  9. 2019蓝桥杯省赛---java---B---7(外卖店优先级)
  10. Tomacat乱码解决