本文详解在升级 zulu jdk 8 后,使用 apache cxf 的 cxf-codegen-plugin 执行 wsdl2java 时因 ssl 证书链不可信导致的 `pkix path building failed` 错误,并提供安全、可复现的证书导入解决方案。
该错误本质上是 JDK 的信任库(cacerts)中缺少目标 HTTPS WSDL 端点所用服务器证书的可信根证书或中间证书。当 cxf-codegen-plugin 在解析 WSDL 文件过程中,遇到 或 引用的远程 XSD 地址(如 https://siemops-test.siemens-energy.com/…?xsd=xsd5)时,会发起 HTTPS 请求——而新版本 JDK(尤其是 Zulu 8.64+)默认启用更严格的 TLS 和证书路径验证,若服务端证书未被本地 cacerts 信任,即抛出 SSLHandshakeException 并中断代码生成。
✅ 解决方案:将目标站点证书导入 JDK 的 cacerts 信任库
步骤 1:导出服务器证书
打开浏览器(推荐 Chrome 或 Firefox),访问:
https://siemops-test.siemens-energy.com/SDPService_DEV/SDPSiemopsService.svc?wsdl
点击地址栏锁形图标 → “连接是安全的” → “证书” → 切换到“详细信息”选项卡 → 点击“复制到文件…” → 选择“Base-64 编码的 X.509 (.CER)”格式 → 保存为 siemops-test.cer(例如:C:\certs\siemops-test.cer)。
? 提示:若无法直接访问 WSDL,也可用 OpenSSL 命令导出: openssl s_client -connect siemops-test.siemens-energy.com:443 -showcerts /dev/null | openssl x509 -outform PEM > siemops-test.cer
步骤 2:定位 JDK 的 cacerts 文件
Zulu JDK 的信任库路径通常为:
立即学习“Java免费学习笔记(深入)”;
{JAVA_HOME}\jre\lib\security\cacerts
例如:
C:\Program Files\Zulu\zulu-8\jre\lib\security\cacerts
⚠️ 注意:务必确认你构建项目时实际使用的 JAVA_HOME(可通过 mvn -version 验证),而非系统默认 JDK。