You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 17下无法从WSDL生成存根及证书导入失败求助

Java 17下WSDL存根生成及证书导入失败求助

问题描述

  • 此前使用JDK 5时,无需插件就能在Eclipse中通过wsimport从WSDL生成存根,证书导入流程简单。
  • 当前使用Java 17,目标WSDL URL为非公开地址,已安装对应证书且浏览器可正常访问API,但通过SOAP UI、Apache CXF、wsimport生成存根均失败。
  • 重点尝试wsimport时控制台报错,按网上方案执行以下keytool命令导入证书也报错:
keytool -importcert -trustcacerts -alias superadmin -file C:\Program Files\Java\jdk-17\lib\security\superadmin.cer 
-keystore “C:\Program Files\Java\jdk-17\lib\security\cacerts” -storepass changeit

解决建议

1. 修正keytool命令语法

命令中使用了中文全角引号(“”),Java工具无法识别,需替换为英文半角引号;同时确保以管理员权限运行命令提示符(避免文件权限不足),修正后的命令:

keytool -importcert -trustcacerts -alias superadmin -file "C:\Program Files\Java\jdk-17\lib\security\superadmin.cer" -keystore "C:\Program Files\Java\jdk-17\lib\security\cacerts" -storepass changeit

2. 验证证书导入结果

导入完成后,用以下命令确认证书是否成功加入信任库:

keytool -list -alias superadmin -keystore "C:\Program Files\Java\jdk-17\lib\security\cacerts" -storepass changeit

若证书不存在,检查证书文件路径是否正确,确保superadmin.cer是从目标WSDL站点导出的有效根证书或中间证书。

3. 为wsimport指定信任库

Java 17的wsimport可能未默认使用JDK的cacerts,执行时显式指定信任库路径:

wsimport -truststore "C:\Program Files\Java\jdk-17\lib\security\cacerts" -storepass changeit https://你的私有WSDL地址

注意:若WSDL引用了其他XSD文件,需确保这些XSD所在站点的证书也已导入信任库。

4. Apache CXF wsdl2java配置方案

创建CXF配置文件cxf.xml,指定信任库信息:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="tlsClientParams" class="org.apache.cxf.configuration.jsse.TLSClientParameters">
        <property name="trustManagers">
            <bean class="org.apache.cxf.configuration.jsse.TrustManagerFactoryBean">
                <property name="keyStoreType" value="JKS"/>
                <property name="keyStoreLocation" value="file:C:/Program Files/Java/jdk-17/lib/security/cacerts"/>
                <property name="keyStorePassword" value="changeit"/>
            </bean>
        </property>
    </bean>
    <bean id="httpConduitConfigurer" class="org.apache.cxf.transport.http.HTTPConduitConfigurer">
        <method name="configure">
            <parameter type="org.apache.cxf.endpoint.Endpoint"/>
            <parameter type="org.apache.cxf.transport.http.HTTPConduit"/>
        </method>
        <property name="tlsClientParameters" ref="tlsClientParams"/>
    </bean>
</beans>

执行wsdl2java时指定配置文件:

wsdl2java -c cxf.xml https://你的私有WSDL地址

内容的提问来源于stack exchange,提问作者suri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:30:19