无法测试REST API的RESTEasy JAX-RS实现

时间:2016-11-17 11:54:33

标签: rest jax-rs websphere resteasy

我有一个休息申请。我的目标是删除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。

1 个答案:

答案 0 :(得分:3)

您是否将Web模块的类加载器设置为使用“Parent last”委派模式?这是将您自己的JAX-RS提供程序引入WebSphere的必要部分。 “禁用”内置提供程序(通过您提到的系统属性)可以防止它初始化,但是通过类加载器仍然可以看到它的类。您需要配置Web应用程序的类加载器,以确保它首先加载本地类。

请注意,如果您担心应用程序中出现其他问题的“父级最后”设置,您可以将JAX-RS API和实现仅放入共享库,将共享库设置为使用隔离类加载器,并将其与您的Web模块关联。获得这种类加载风格的方式更有针对性(也就是更安全)。