我有一个休息申请。我的目标是删除IBM JAX-RS并使用RESTEasy JAX-RS实现。我正在使用WAS8,我只想使用它。
对于禁用IBM JAX-RS,我删除了IBMRestServlet和IBMRestFilter类,并在管理控制台中将com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine JVM prop设置为tru。
对于RESTEasy JAX-RS实现,在pom中添加了resteasy-jaxrs依赖关系并在web.xml中添加了配置的servlet
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.0.11.Final</version>
</dependency>
Web.xml中
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.application.RestApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
A)最初我得到了&#34; java.lang.NoSuchMethodError:org / jboss / resteasy / specimpl / BuiltResponse.getHeaders()&#34;例外。查看各种答案,在pom.xml中添加以下依赖项作为第一个(虽然这对我没有任何意义)
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
<version>3.0.11.Final</version>
</dependency>
B)此后,我收到java.lang.NoSuchMethodError:javax / ws / rs / ClientErrorException.validate(Ljavax / ws / rs / core / Response; Ljavax / ws / rs / core / Response $ Status $家族; Ljavax / WS / RS /核心/响应)
你能帮我解决A和B异常。我想在WAS8中尝试这个。
此外,我如何确定我已完全禁用IBM JAX-RS,而服务器仅选择REST Easy jaxrs。
答案 0 :(得分:3)
您是否将Web模块的类加载器设置为使用“Parent last”委派模式?这是将您自己的JAX-RS提供程序引入WebSphere的必要部分。 “禁用”内置提供程序(通过您提到的系统属性)可以防止它初始化,但是通过类加载器仍然可以看到它的类。您需要配置Web应用程序的类加载器,以确保它首先加载本地类。
请注意,如果您担心应用程序中出现其他问题的“父级最后”设置,您可以将JAX-RS API和实现仅放入共享库,将共享库设置为使用隔离类加载器,并将其与您的Web模块关联。获得这种类加载风格的方式更有针对性(也就是更安全)。