【问题标题】:Tomcat 9 JDK 14 "java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceRef"Tomcat 9 JDK 14“java.lang.NoClassDefFoundError:javax/xml/ws/WebServiceRef”
【发布时间】:2020-07-28 03:46:11
【问题描述】:

我有一个 Java Web 应用程序,它与 Netbeans 12 和 Tomcat 9 一起正常工作。但是,我最近将我的 JDK 从 1.8.0 更新到 14.0.2,现在每次尝试运行该项目时都会出现此错误:

27-Jul-2020 23:29:47.565 SEVERE [http-nio-8080-exec-6] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [Tomcat WebSocket (JSR356) Filter]
 java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceRef
    at org.apache.catalina.core.DefaultInstanceManager.populateAnnotationsCache(DefaultInstanceManager.java:303)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:135)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:111)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4481)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5121)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:740)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:716)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:620)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1644)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
    at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
    at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1479)
    at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:900)
    at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:592)
    at org.apache.catalina.valves.RequestFilterValve.process(RequestFilterValve.java:319)
    at org.apache.catalina.valves.RemoteAddrValve.invoke(RemoteAddrValve.java:88)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:625)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1372)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:832)

我已将 javax.xml.ws 添加到我的 pom 文件中,但没有成功:

<dependency>
    <groupId>javax.xml.ws</groupId>
    <artifactId>jaxws-api</artifactId>
    <version>2.3.1</version>
</dependency>

我也试过了,没有成功:

  • 在我的 pom 中使用 jakarta 版本而不是 javax
  • 将 jaxws-api jar 添加到 Tomcat 的 lib 文件夹中
  • 切换到 JDK 9、10、11、13
  • 切换到 Tomcat 8.5、10

我什至可以在我的代码中导入/引用 WebServiceRef 类而不会出现编译错误,所以我知道它就在那里。为什么会出现此错误/如何解决?

如果需要,我可以发布更多详细信息。

编辑:

我相信错误在于启动 Tomcat 而不是运行我的项目。我的项目能够毫无错误地构建 - 只有在部署它时我才会收到错误。我已经下载了 Tomcat 的源代码,并且确实可以看到 WebServiceRef 类的使用。我的想法是,由于 javax.xml.ws 不再包含在 JDK 9+ 中,因此 Tomcat 的代码会引发错误。我只是不知道如何添加库以供 Tomcat 使用 - 将其添加到 lib 文件夹不起作用。

【问题讨论】:

标签: java tomcat netbeans


【解决方案1】:

我终于能够通过将以下 JAR 添加到 Tomcat 的 lib 文件夹(JAX WS API 及其所有依赖项)来解决此问题:

  • jaxws-api-2.3.1
  • jaxb-api-2.3.1
  • javax.xml.soap-api-1.4.0
  • javax.annotation-api-1.3.2
  • java.activation-api-1.2.0

【讨论】:

  • 你的意思是javaX.activation-api-1.2.0吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 2018-08-29
  • 2011-03-05
  • 1970-01-01
  • 2017-06-23
  • 2018-12-27
  • 2019-06-16
相关资源
最近更新 更多