首页 > 解决方案 > 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>

标签: javaeclipseweb-servicesservletstomcat7

解决方案


在我看来,原因是您的类路径中缺少库。具体来说,您有一些用 注释的类@javax.persistence.PersistenceUnit,但类路径中缺少此类。所以我建议你列出测试网络服务器中部署的所有库(包括 /lib 库),并将它们与本地服务器中部署的库进行比较,特别注意其中一些:

  • 持久性.jar
  • javaee-api-*.jar
  • 注释-api-*.jar

..这是javax.persistence.PersistenceUnit可能存在类的标准库。


推荐阅读