JDK11+WildFly27中使用HTTP-Proxy-Servlet报错,需替换javax为jakarta吗?
问题解答
报错信息
11:23:55,153 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."proxy.war".undertow-deployment.UndertowDeploymentInfoService: org.jboss.msc.service.StartException in service jboss.deployment.unit."proxy.war".undertow-deployment.UndertowDeploymentInfoService: Failed to start service at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1731) at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559) at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990) at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: java.lang.IllegalArgumentException: UT010009: Servlet proxyHostServer of type class org.mitre.dsmiley.httpproxy.ProxyServlet does not implement jakarta.servlet.Servlet at io.undertow.servlet@2.3.0.Final//io.undertow.servlet.api.ServletInfo.<init>(ServletInfo.java:98) at org.wildfly.extension.undertow@27.0.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.createServletConfig(UndertowDeploymentInfoService.java:660) at org.wildfly.extension.undertow@27.0.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.start(UndertowDeploymentInfoService.java:288) at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739) at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
核心原因
错误的关键在于:ProxyServlet 实现的是旧版Java EE规范的 javax.servlet.Servlet 接口,但WildFly 27基于Jakarta EE 10规范,使用的是 jakarta.servlet.Servlet 接口——两者属于不同的API体系,类加载时无法兼容,因此容器判定该Servlet不符合要求。
问题解答
该组件能否直接使用?
不能直接在WildFly 27中使用,组件依赖的Servlet API版本与容器要求的Jakarta Servlet API不兼容。是否需要将javax替换为jakarta?
需要。可以通过两种方式处理:- 手动修改组件源码:将所有
javax.servlet相关的导入语句替换为jakarta.servlet,重新编译打包成适配Jakarta版本的JAR; - 寻找适配版本:查看该组件是否有官方或社区维护的Jakarta分支,直接使用适配后的版本。
- 手动修改组件源码:将所有
此问题是否因WildFly导致,更换Tomcat是否不会出现?
这不是WildFly独有的问题,本质是Servlet API版本迭代的兼容性问题:- 若更换为Tomcat 10及以上版本,同样会触发该错误,因为Tomcat 10+也切换到了Jakarta Servlet API(
jakarta.servlet包); - 只有使用Tomcat 9及以下版本(仍使用旧版
javax.servlet包),才能直接兼容原组件。
- 若更换为Tomcat 10及以上版本,同样会触发该错误,因为Tomcat 10+也切换到了Jakarta Servlet API(
内容的提问来源于stack exchange,提问作者yaron
相关产品推荐
相关产品推荐

