我一直在尝试在WebSphere ND 8.5上部署和运行基于Jersey2的REST应用程序。但是,它拒绝正确启动并给出以下错误:
com.ibm.ws.webcontainer.servlet.ServletWrapper运行SRVE8052E:记录ClassnotFoundException java.lang.ClassnotFoundException:org.glassfish.jersey.servlet.ServletContainer
我尝试解决了大多数相关问题,但没有一个对解决问题有帮助。
我尝试过的一些链接:
-
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer-已接受的答案是关于确保jars存在于WEB-INF / lib中。我的项目已经是Maven项目,并且正确捆绑了依赖项:
-
JAX-RS Jersey 2.10 support in Websphere 8-在JVM属性中将com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine设置为true没有帮助
- WebSphere 8.5.5.9 with Jersey 2.25-与上述建议相同
到目前为止,在我的本地设置中,EAR文件在Liberty概要文件服务器(嵌入eclipse)中正确运行。 Maven构建工作正常,并且库已正确复制。
我知道的一个差异是我使用的是Jersey2.xx,但仍带有web.xml中的条目。但是我不确定这怎么会导致ClassnotFoundException。
web.xml供参考:
y
奇怪的是,几天前,该应用程序至少在没有此错误的情况下启动,之后管理员“手动删除了旧文件”,然后在服务器上重新安装了该应用程序。这使我认为在此过程中有一些配置被删除/重置导致了此问题。
如何在没有WAS ND 8.5上出现此异常的情况下运行EAR?
编辑:添加完整的堆栈跟踪。我已经将类加载设置为PARENT_LAST,所以我猜应该使用模块的类加载器?
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>MyRestApp</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>My REST Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.vai.app.rest.main.MyRestApplication</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.vai.app.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>My REST Application</servlet-name>
<url-pattern>/rest/api/*</url-pattern>
</servlet-mapping>
</web-app>