java.lang.ClassCastExce
ption: class org.apache.cxf.transport.servlet.CXFServlet不能被投到class jakarta.Servlet.Servlet
我知道Tomcat 10支持Servlet 5.0,并且使用jakarta.servlet包,而不是CXF使用的javax.servlet。這是否意味著我不能將Tomcat 10與CXF一起使用,而應該降級到Tomcat 9?我正在使用最新的cxf,3.4.4。當使用Tomcat 5和cxf 2.x時,該代碼曾經作業過。
完整的堆疊跟蹤是:
java.lang.ClassCastException: class org.apache.cxf.transport.servlet.CXFServlet不能被投到class jakarta.Servlet.Servlet(org.apache.cxf.transport. servlet.CXFServlet在loader org.apache.catalina.loader.ParallelWebappClassLoader @3b2c6f60的未命名module中;jakarta.servlet.Servlet在loader java.net.URLClassLoader @77a567e1的未命名module中)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1050)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:990)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4906)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5213)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:728)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1027)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2001)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:828)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:478)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1757)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:316)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1164)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1367)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1371)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
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:831)
uj5u.com熱心網友回復:
沒有支持Jakarta EE 9的CXF官方版本,但是你可以使用Tomcat Migration Tool for Jakarta EE來替換CXF jar檔案和源代碼中的命名空間。
這也是TomEE(使用 CXF)在其 9.0 系列中選擇的方法,因此應該是相對安全的。
Tomcat 10.0 本身集成了遷移工具,如果你將 WAR 檔案放在 webapps-javaee 檔案夾中,就可以在部署前將其轉換。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/319407.html
標籤:
