Java调用SoapUI的WsdlProject实例化抛出ClassCastException异常如何解决?
异常产生原因
- 版本兼容性bug:你引入的5.2.1版本soapui开源依赖属于官方打包异常的版本,该版本底层通过XmlBeans生成的
EndpointStrategyConfigImpl实现类未正确实现DefaultEndpointStrategyConfig接口,直接调用无参WsdlProject构造函数加载默认配置时就会触发类转换异常。 - 依赖冲突:如果项目中存在多个版本的XmlBeans、soapui子依赖,会导致类加载器加载到不匹配的类实现,也会触发该异常。
解决方案
1. 调整依赖版本
将pom.xml中的soapui依赖替换为无该兼容性问题的5.1.2稳定版本,同时排除冲突的子依赖,配置参考如下:
<repositories> <repository> <id>smartbear-sweden</id> <url>https://www.soapui.org/repository/maven2/</url> </repository> </repositories> <dependencies> <dependency> <groupId>com.smartbear.soapui</groupId> <artifactId>soapui</artifactId> <version>5.1.2</version> <exclusions> <!-- 排除自带的冲突XmlBeans版本 --> <exclusion> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> </exclusion> <!-- 排除日志实现冲突,可根据自己项目的日志框架调整 --> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <!-- 引入适配5.1.2版本的XmlBeans依赖 --> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>2.6.0</version> </dependency> </dependencies>
该版本完美兼容你当前使用的Java 8运行环境,无需调整JDK配置。
2. 调整WsdlProject初始化逻辑
避免使用无参构造函数,改为传入空字符串作为临时项目路径,规避默认配置加载逻辑的兼容性问题:
String endPointUrl = "http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL"; // 传入空字符串替代无参构造 WsdlProject project = new WsdlProject(""); WsdlInterface[] wsdls = WsdlImporter.importWsdl(project, endPointUrl); WsdlInterface wsdl = wsdls[0];
3. 排查依赖冲突
在IntelliJ的Maven工具窗口执行dependency:tree命令,检查是否存在多版本的soapui、XmlBeans依赖,将多余的冲突版本全部排除,确保所有相关依赖版本统一。
内容的提问来源于stack exchange,提问作者Fluch
相关产品推荐
相关产品推荐

