本文详解因 jdk 升级后 ssl 证书信任链缺失,导致 apache cxf 的 `cxf-codegen-plugin:wsdl2java` 在解析远程 wsdl/xsd 时抛出 `pkix path building failed` 错误的根因与完整解决方案。
该错误本质是 JDK 的信任库(cacerts)中缺少目标 HTTPS 服务(https://siemops-test.siemens-energy.com)所用 TLS 证书的可信根证书或中间证书,导致 wsdl2java 在解析 WSDL 中引用的远程 XSD(如 ?xsd=xsd5)时,SSL 握手失败:
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
尽管你已尝试升级 CXF(至 3.4.5)或切换 Zulu JDK 小版本(如 8.56 → 8.64),但问题未解——因为这是 JDK 级别的证书信任问题,与 CXF 版本无关。新版本 Zulu JDK(尤其是 8.64+)默认启用了更严格的证书验证策略,且其 cacerts 未预置企业内网或私有 CA 签发的证书。
✅ 正确解决方案:将目标站点证书导入 JDK 的 cacerts 信任库。
步骤一:导出目标站点证书
- 在浏览器中访问 https://siemops-test.siemens-energy.com/SDPService_DEV/SDPSiemopsService.svc?wsdl(确保地址可访问);
- 点击地址栏锁形图标 → “连接安全” → “证书” → 切换到“详细信息”选项卡 → 点击“复制到文件…” → 选择“Base-64 编码 X.509 (.CER)”格式,保存为 siemops-test.cer(例如:C:\certs\siemops-test.cer)。
⚠️ 注意:若站点使用通配符证书或由内部 CA 签发,请确保导出的是根证书或完整的证书链(推荐导出整个证书路径中的“根证书”)。
步骤二:定位 JDK 的 cacerts 文件
Zulu JDK 的默认信任库路径为:
立即学习“Java免费学习笔记(深入)”;
{JAVA_HOME}\jre\lib\security\cacerts
例如: