java - Apache tomcat 7 在 localhost 上运行良好,但部署的 war 文件在尝试运行时抛出异常
问题描述
我在 Eclipse 中有一个 jax rs Web 服务,它们在我们的测试服务器上运行良好,但是当我尝试在 Eclipse 中运行它们时,在我的本地机器上抛出异常。
下面是它抛出的错误
servlet ServletAdaptor 的消息 Servlet.init() 抛出异常
说明 服务器遇到了阻止它完成请求的意外情况。
例外
javax.servlet.ServletException:Servlet ServletAdaptor 的 Servlet.init() 抛出异常 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 104) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) org.apache.coyote.http11.AbstractHttp11Processor.process( AbstractHttp11Processor.java:1136) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) java.util。 concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Unknown Source)
根本原因
java.lang.TypeNotPresentException:类型 javax.persistence.PersistenceUnit 不存在 sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(未知来源) sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(未知来源) sun.reflect.generics。 tree.ClassTypeSignature.accept(未知来源) sun.reflect.generics.visitor.Reifier.reifyTypeArguments(未知来源) sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(未知来源) sun.reflect.generics.tree.ClassTypeSignature.accept (未知来源) sun.reflect.generics.repository.ClassRepository.getSuperInterfaces(未知来源) java.lang.Class.getGenericInterfaces(未知来源) com.sun.jersey.core.spi.factory.InjectableProviderFactory.getMetaArguments(InjectableProviderFactory.java: 135) com.sun.jersey.core.spi.factory。InjectableProviderFactory.add(InjectableProviderFactory.java:93) com.sun.jersey.core.spi.factory.InjectableProviderFactory$1.onAdd(InjectableProviderFactory.java:109) com.sun.jersey.core.spi.factory.InjectableProviderFactory$1.onAdd( InjectableProviderFactory.java:107) com.sun.jersey.core.spi.component.ProviderServices.getProvidersAndServices(ProviderServices.java:204) com.sun.jersey.core.spi.factory.InjectableProviderFactory.configure(InjectableProviderFactory.java:106) com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1153) com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180) com.sun.jersey .server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799) com.sun.jersey.server.impl.application.WebApplicationImpl$13。f(WebApplicationImpl.java:795) com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193) com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790) com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509) com.sun.jersey。 spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339) com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) com.sun.jersey.spi.container。 servlet.WebComponent.init(WebComponent.java:207) com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394) com.sun.jersey.spi.container.servlet.ServletContainer.init( ServletContainer.java:577)javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494) 104) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) org.apache.coyote.http11.AbstractHttp11Processor.process( AbstractHttp11Processor.java:1136) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) java.util。 concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) org.apache.tomcat.util.threads。TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Unknown Source)
根本原因
下面是eclipse项目web.xml文件
<?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" id="WebApp_ID" version="3.0">
<display-name>leaveMgt</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>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>webServices</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
解决方案
在我看来,原因是您的类路径中缺少库。具体来说,您有一些用 注释的类@javax.persistence.PersistenceUnit
,但类路径中缺少此类。所以我建议你列出测试网络服务器中部署的所有库(包括 /lib 库),并将它们与本地服务器中部署的库进行比较,特别注意其中一些:
- 持久性.jar
- javaee-api-*.jar
- 注释-api-*.jar
..这是javax.persistence.PersistenceUnit
可能存在类的标准库。
推荐阅读
- charts - pentaho 第一步:将组合框链接到图表
- c# - 在.NET c#中执行命令行命令
- java - DatagramSocket,如何清除输入和输出缓冲区?
- java - @Entitty 和 @EntityScan 不起作用。我正在使用 spring boot 和 jpa 存储库,发生了很多次
- linux - ISO 格式的日志创建日期
- android - 如何在 android studio 项目中使用 CMake 正确包含 Qt5Core 静态库?
- python - 如何使用python搜索字符串中的特定文本
- python - 如果值相同,如何更改行的值
- html - 按钮中的空格使按钮在导航栏中换行
- django - 无法连接到网站 - 连接被拒绝 - Nginx - SSL