如何在websphere 8.5中使用jersey部署JAX-RS应用程序



当我在websphere 7.0中部署app.war时。restful web服务初始化成功。处理步骤
但是在我升级到websphere 8.5之后。未能部署restful web服务类。
下面是我的app.war的pom.xml。

    <!-- restful web service -->
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>jsr311-api</artifactId>
        <version>1.1.1</version>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>asm</groupId>
        <artifactId>asm-all</artifactId>
        <version>3.2</version>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.17</version>
        <scope>compile</scope>
    </dependency>
     <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.17</version>
       <scope>compile</scope>
    </dependency>  
     <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.17</version>
       <scope>compile</scope>
    </dependency>  
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.17</version>
        <scope>compile</scope>
    </dependency>

下面是my web.xml

  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.tag.services.testrsws</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rs/*</url-pattern>
  </servlet-mapping>
</web-app> 

下面是启动应用程序时的websphere错误日志:

[13-3-1 13:22:44:103 CST] 000003b5 PackagesResou I扫描包中的根资源和提供商类:com.tag.services.testrsws
[13-3-1 13:22:44:123 CST] 000003b5 servlet E com.ibm.ws.webcontainer.servlet.ServletWrapper init Uncaught.init.exception.thrown.by.servlet
[13-3-1 13:22:44:124 CST] 000003b5 webapp E com.ibm.ws.webcontainer.webapp.WebApp commonInitializationFinally SRVE0266E: init servlet错误:{0}javax.servlet.ServletException: SRVE0207E: servlet创建由servlet抛出的未捕获异常com.ibm.ws.webcontainer.servlet.ServletWrapper.init (ServletWrapper.java: 398)


引起的。IncompatibleClassChangeError: org.objectweb.asm.ClassVisitor 在java.lang.ClassLoader.defineClassImpl(本机方法)java.lang.ClassLoader.defineClass (ClassLoader.java: 262)java.security.SecureClassLoader.defineClass (SecureClassLoader.java: 69)com.ibm.ws.classloader.CompoundClassLoader._defineClass (CompoundClassLoader.java: 852)com.ibm.ws.classloader.CompoundClassLoader.localFindClass (CompoundClassLoader.java: 762)com.ibm.ws.classloader.CompoundClassLoader.loadClass (CompoundClassLoader.java: 585)java.lang.ClassLoader.loadClass (ClassLoader.java: 627)在java.lang.J9VMInternals。verifyImpl(本地方法)java.lang.J9VMInternals.verify (J9VMInternals.java: 85)java.lang.J9VMInternals.verify (J9VMInternals.java: 83)java.lang.J9VMInternals.initialize (J9VMInternals.java: 162)com.sun.jersey.api.core.ScanningResourceConfig.init (ScanningResourceConfig.java: 79)com.sun.jersey.api.core.PackagesResourceConfig.init (PackagesResourceConfig.java: 104)在com.sun.jersey.api.core.PackagesResourceConfig。(PackagesResourceConfig.java: 78)在com.sun.jersey.api.core.PackagesResourceConfig。(PackagesResourceConfig.java: 89)com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig (WebComponent.java: 696)com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig (WebComponent.java: 674)com.sun.jersey.spi.container.servlet.WebComponent.init (WebComponent.java: 203)com.sun.jersey.spi.container.servlet.ServletContainer.init (ServletContainer.java: 374)com.sun.jersey.spi.container.servlet.ServletContainer.init (ServletContainer.java: 557)javax.servlet.GenericServlet.init (GenericServlet.java: 161)com.ibm.ws.webcontainer.servlet.ServletWrapper.init (ServletWrapper.java: 336)

经过google搜索,有人说可能是websphere服务器已经包含了asm。所以我从app.war WEB-INF/lib中删除了asm.jar。但是它仍然有错误

@Surge advice除外。
您是否尝试创建一个共享库,并将asm-all.jar jerserry .jar放入库中?并为应用程序指定共享库。

您不应该从WEB-INF/lib中删除您的asm.jar。相反,您应该指示websphere 8.5使用WEB-INF/lib中的asm.jar,而不是websphere安装提供的asm.jar。查看这个链接:配置Web模块类加载器。您应该选择首先使用本地类加载器加载的类

根据注释编辑:

看起来这是Websphere 8.5 PM63479中的一个bug;eareexpander抛出java.lang.incompatibleclasschangeerror。请下载PM63479,看看是否能解决您的问题。

最新更新