升级org.apache.cxf至4.x版本出现构建错误,求迁移指导
CXF 3.3.7 升级到4.x版本的迁移修改指南
问题描述
原有Java应用使用org.apache.cxf:cxf-rt-frontend-jaxrs:3.3.7,升级至CXF 4.x版本后出现构建错误,错误日志如下:
Not a valid jaxb or jaxws binding file, please check the namespace at org.apache.cxf.tools.wsdlto.frontend.jaxws.customization.CustomizationParser.addBinding(CustomizationParser.java:540) [[1;33mWARNING[m] at org.apache.cxf.tools.wsdlto.frontend.jaxws.customization.CustomizationParser.parse(CustomizationParser.java:117) [[1;33mWARNING[m] at org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.customize(JAXWSDefinitionBuilder.java:115) [[1;33mWARNING[m] at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:188) [[1;33mWARNING[m] at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:156) [[1;33mWARNING[m] at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:402) [[1;33mWARNING[m] at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:105) [[1;33mWARNING[m] at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113) [[1;33mWARNING[m] at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86) [[1;33mWARNING[m] at org.apache.cxf.maven_plugin.wsdl2java.ForkOnceWSDL2Java.main(ForkOnceWSDL2Java.java:51)
迁移修改要点
1. 修正绑定文件的命名空间
CXF 4.x对JAXB/JAXWS绑定文件的命名空间校验更严格,需替换为Jakarta EE规范的命名空间:
- JAXB绑定文件:将原
http://java.sun.com/xml/ns/jaxb替换为https://jakarta.ee/xml/ns/jaxb,并指定版本为3.0或更高,示例:<jaxb:bindings xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb" version="3.0"> <!-- 绑定内容 --> </jaxb:bindings> - JAXWS绑定文件:将原
http://java.sun.com/xml/ns/jaxws替换为https://jakarta.ee/xml/ns/jaxws,示例:<jaxws:bindings xmlns:jaxws="https://jakarta.ee/xml/ns/jaxws" version="3.0"> <!-- 绑定内容 --> </jaxws:bindings>
2. 替换代码中的API导入路径
CXF 4.x基于Jakarta EE规范,需将所有Java EE的javax包导入替换为Jakarta的jakarta包:
- 原
import javax.xml.bind.*→import jakarta.xml.bind.* - 原
import javax.jws.*→import jakarta.jws.* - 原
import javax.ws.rs.*→import jakarta.ws.rs.*
3. 更新Maven插件与依赖
- 确保
cxf-codegen-plugin版本与CXF 4.x一致,插件配置中引入Jakarta版本的API依赖:<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>4.0.0</version> <!-- 对应CXF 4.x版本 --> <dependencies> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>3.0.1</version> </dependency> </dependencies> </plugin> - 更新项目中所有CXF相关依赖至4.x版本,确保依赖的API为Jakarta版本。
4. 验证绑定文件结构
检查绑定文件根元素是否匹配:JAXB绑定文件根元素为<jaxb:bindings>,JAXWS绑定文件根元素为<jaxws:bindings>,避免命名空间拼写错误或根元素类型不匹配。
内容的提问来源于stack exchange,提问作者Alok Kumar
相关产品推荐
相关产品推荐

