Tomcat部署SOAP服务报错:cxf与AxisServlet URL映射冲突
解决Tomcat 10中CXF与AxisServlet的URL映射冲突问题
问题根源
你的项目中同时配置了Apache CXF的cxf Servlet和Axis的AxisServlet,两者都绑定了/services/*这个URL路径模式。Tomcat不允许同一URL模式被多个Servlet映射,直接导致项目上下文/SOAPExample启动失败;同时Eclipse尝试通过Axis部署服务时找不到对应资源,抛出IWAB0489E和404错误。
解决方案
方案1:移除Axis相关配置(推荐,因为你使用CXF构建SOAP服务)
- 打开项目的
web.xml文件,定位到AxisServlet的配置代码块,直接删除:
<servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
- 检查项目的依赖库,删除所有Axis相关的JAR包(如
axis.jar、axis-ant.jar等),彻底清除Axis相关组件。
方案2:修改其中一个Servlet的URL映射(仅当必须保留Axis时使用)
如果确实需要同时保留AxisServlet,修改它的URL映射路径,避免和CXF冲突:
<servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/axis-services/*</url-pattern> </servlet-mapping>
后续访问Axis相关服务时,需使用新的URL路径(如http://localhost:8080/SOAPExample/axis-services/xxx)。
额外注意事项
- Tomcat 10基于Jakarta EE规范,而Apache CXF 2.x仅支持Java EE,两者存在兼容性差异,建议升级到CXF 3.6及以上版本(支持Jakarta EE),避免后续出现更多兼容性问题。
- 清理Eclipse服务器缓存:右键Tomcat服务器 → Clean...,再选择Clean Tomcat Work Directory,之后重新部署项目,确保旧配置被完全清除。
内容的提问来源于stack exchange,提问作者vico
相关产品推荐
相关产品推荐

