2013-03-01 62 views
0

当我在websphere 7.0中部署我的app.war时。平静的Web服务已成功初始化。
但我升级到websphere 8.5后。它无法部署宁静的Web服务类。
下面是我的app.war的运动衫pom.xml。如何在websphere中使用球衣来部署JAX-RS应用程序8.5

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

下面是我的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 Scanning for root resource and provider classes in the packages: 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 error:{0} javax.servlet.ServletException: SRVE0207E: servlet create uncaught exception thrown by servlet at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:398)
...
...
Caused by: java.lang.IncompatibleClassChangeError: org.objectweb.asm.ClassVisitor at java.lang.ClassLoader.defineClassImpl(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:262) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:69) at com.ibm.ws.classloader.CompoundClassLoader._defineClass(CompoundClassLoader.java:852) at com.ibm.ws.classloader.CompoundClassLoader.localFindClass(CompoundClassLoader.java:762) at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:585) at java.lang.ClassLoader.loadClass(ClassLoader.java:627) at java.lang.J9VMInternals.verifyImpl(Native Method) at java.lang.J9VMInternals.verify(J9VMInternals.java:85) at java.lang.J9VMInternals.verify(J9VMInternals.java:83) at java.lang.J9VMInternals.initialize(J9VMInternals.java:162) at com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79) at com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:104) at com.sun.jersey.api.core.PackagesResourceConfig.(PackagesResourceConfig.java:78) at com.sun.jersey.api.core.PackagesResourceConfig.(PackagesResourceConfig.java:89) at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:696) at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:674) at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:203) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557) at javax.servlet.GenericServlet.init(GenericServlet.java:161) at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:336)

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

回答

1

除了@Surge的建议。
您是否尝试创建共享库,并将您的asm-all.jar jersery.jar放入您的库中并将共享库指定给您的应用程序。

1

你不应该从我们的WEB-INF/lib中删除你的asm.jar。相反,您应该指示您的websphere 8.5在WEB-INF/lib中使用asm.jar,而不是由Websphere安装提供的asm.jar。看看这个链接:Configure Web Module Classloader。您应该选择首先使用本地类加载器加载的类

编辑基于评论:

看起来这是在WebSphere 8.5 PM63479; 8.5: earexpander throws java.lang.incompatibleclasschangeerror的错误。请下载PM63479以查看它是否解决了您的问题。

+0

我已经选择了用本地类加载器加载的类,但它仍然抛出上述错误。 – FishGel 2013-03-01 05:52:51

+0

我更新了答案。它看起来像一个错误,并有一个补丁。 – Lan 2013-03-01 06:03:25

+0

我没有更新Websphere.I尝试了yudong的建议。好的,谢谢。 – FishGel 2013-03-08 00:49:56