Maven执行clean verify遇JAXB/CXF方法缺失及405错误求助
问题解决方案
一、解决java.lang.NoSuchMethodError(JAXB方法找不到)
这个错误核心是CXF版本与JAXB依赖版本不兼容,或存在JAXB依赖冲突,按以下步骤排查:
- 统一CXF版本
确保项目中所有CXF相关依赖(如cxf-core、cxf-rt-frontend-jaxws、cxf-rt-transports-http等)使用同一版本,避免跨版本依赖冲突。可在dependencyManagement中锁定版本:
<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-bom</artifactId> <version>3.5.5</version> <!-- 替换为你的CXF版本 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
- 排除冲突的JAXB依赖
检查pom.xml中所有依赖,排除引入的旧版JAXB API/实现。例如第三方依赖可能引入低版本jaxb-api,通过<exclusions>移除:
<dependency> <groupId>第三方依赖groupId</groupId> <artifactId>第三方依赖artifactId</artifactId> <exclusions> <exclusion> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> </exclusion> <exclusion> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> </exclusion> </exclusions> </dependency>
- 显式声明兼容的JAXB依赖
根据CXF版本引入匹配的JAXB API和实现,CXF 3.x系列推荐搭配JAXB 2.3.x版本:
<!-- JAXB API --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <!-- JAXB 运行时实现 --> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.1</version> <scope>runtime</scope> </dependency>
二、解决HTTP 405 Method Not Allowed
这个错误是请求的HTTP方法与服务端接口定义不匹配,或路由配置错误,排查方向:
- 核对接口注解与请求方法
- SOAP服务:检查
@WebMethod注解的接口,确认客户端请求的SOAPAction与接口定义一致; - REST服务:检查
@GET/@POST/@PUT等HTTP方法注解是否与实际请求方法匹配,@Path注解的路径是否和请求URL一致。
- 检查CXF服务配置
- Spring整合场景:确认
jaxws:endpoint或jaxrs:server的address配置正确,无路径拼写错误; - 排查是否存在拦截器过滤了特定HTTP方法,比如自定义拦截器拒绝了POST请求。
- 验证请求细节
确认测试时使用的请求URL、HTTP方法(如GET/POST)、请求头是否符合接口要求,可通过Postman等工具直接发送请求排查。
请补充以下信息以便精准定位:
- 项目使用的CXF具体版本
- pom.xml完整内容(可隐藏敏感信息)
- 405错误对应的请求URL、HTTP方法及接口代码片段
- 完整的报错栈信息
内容的提问来源于stack exchange,提问作者Lore
相关产品推荐
相关产品推荐

