升级Zulu JDK版本后执行cxf-codegen-plugin:wsdl2java报错求助
SSL握手异常:CXF wsdl2java解析WSDL中XSD链接时无法找到有效证书路径
问题背景
- 原环境:Zulu 8.42.0.23-CA-win64 JDK,执行
org.apache.cxf:cxf-codegen-plugin:3.2.1:wsdl2java目标正常 - 升级JDK至zulu8.64.0.19-ca-jdk8.0.345-win_x64后,执行该Maven目标时抛出SSL握手异常,提示无法找到有效证书路径
- 已尝试升级CXF版本至3.4.5,搭配zulu8.56.0.21-ca-jdk8.0.302-win_x64,问题仍未解决
解决步骤
1. 手动导入XSD站点证书到JDK信任库
- 导出证书:用浏览器访问WSDL中引用的XSD链接,从浏览器证书详情中导出证书(建议选DER格式)
- 使用
keytool导入到当前使用的JDK信任库,命令示例:
默认信任库密码为keytool -import -alias xsd-server-cert -file C:/path/to/cert.cer -keystore %JAVA_HOME%/jre/lib/security/cacertschangeit,注意替换为实际的证书路径和JDK路径
2. 对比新旧Zulu JDK的信任库差异
Zulu JDK版本升级后,内置的cacerts信任库可能移除了部分旧根证书:
- 查看当前JDK信任库的证书列表:
keytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts - 对比旧版本Zulu 8的
cacerts内容,找出缺失的目标XSD站点根证书,手动导入到新JDK的信任库
3. 配置CXF插件指定自定义信任库
在pom.xml的cxf-codegen-plugin配置中,添加VM参数指定信任库路径:
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>3.4.5</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <goals> <goal>wsdl2java</goal> </goals> <configuration> <vmArgs> <vmArg>-Djavax.net.ssl.trustStore=C:/path/to/your/custom/cacerts</vmArg> <vmArg>-Djavax.net.ssl.trustStorePassword=changeit</vmArg> </vmArgs> <!-- 其他WSDL配置 --> </configuration> </execution> </executions> </plugin>
4. 排查WSDL中XSD引用的合法性
- 确认WSDL里的
schemaLocation指向的XSD链接是可直接访问的HTTPS地址,没有重定向到未信任的站点 - 尝试直接下载XSD文件,本地引用(修改WSDL的
schemaLocation为本地路径),验证是否是远程证书问题导致的失败
5. 检查网络代理影响
如果使用了网络代理:
- 确认代理服务器的证书已导入JDK信任库
- 检查是否存在代理拦截SSL请求,导致证书验证失败的情况,可以尝试绕过代理访问XSD链接测试
内容的提问来源于stack exchange,提问作者Pranav Saharawat
相关产品推荐
相关产品推荐

