如何在WebSphere8.5中使用jersey部署JAX-RS应用程序

如何在WebSphere8.5中使用jersey部署JAX-RS应用程序,jersey,websphere,jax-rs,websphere-8,Jersey,Websphere,Jax Rs,Websphere 8,当我在websphere 7.0中部署app.war时。restful web服务已成功初始化。但在我升级到websphere 8.5之后。无法部署restful web服务类。 下面是我的app.war针对jersey的pom.xml <!-- restful web service --> <dependency> <groupId>javax.ws.rs</groupId> <artifa

当我在websphere 7.0中部署app.war时。restful web服务已成功初始化。
但在我升级到websphere 8.5之后。无法部署restful web服务类。
下面是我的app.war针对jersey的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>

javax.ws.rs
jsr311 api
1.1.1
真的
asm
asm all
3.2
真的
泽西岛
球衣核心
1.17
编译
泽西岛
泽西servlet
1.17
编译
泽西岛
泽西服务器
1.17
编译
泽西岛
泽西json
1.17
编译
下面是我的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> 

泽西岛休息服务
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
com.tag.services.testrsws
1.
泽西岛休息服务
/rs/*
以下是启动应用程序时的websphere错误日志:

[13-3-1 13:22:44:103 CST]000003b5 PackageResource 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.shown.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)
。。。
。。。
原因:java.lang.CompatibleClassChangeError: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.\u 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)


在谷歌搜索之后,有人说可能是webshpere服务器已经包含了asm。因此,我从app.war WEB-INF/lib中删除了asm.jar。但是它仍然有错误。

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

根据评论进行编辑:

看起来这是WebSphere8.5中的一个bug。请下载PM63479以查看它是否解决了您的问题。

除了@sweep advice。

您是否尝试创建共享库,并将asm-all.jar jersery.jar放入库中。然后为应用程序指定共享库。

我已经选择了首先使用本地类加载器加载的类。但它仍然抛出上述错误。我更新了答案。它看起来像一个bug,并且有一个补丁。我没有更新Websphere。我已经尝试了yudong的建议。没关系,谢谢。