Axis2 v1.8生成SOAP客户端Stub时出现NoSuchMethodException错误
Eclipse结合Axis2 1.8.x生成SOAP客户端Stub报错解决方案
问题场景
- 环境:Eclipse 2024-03 (4.31.0),需从Axis2 v1.7.9升级至v1.8.x生成第三方SOAP服务的客户端Stub
- 操作流程:
- 解压Axis2 v1.8.x安装包
- Eclipse偏好设置中指定Axis2安装目录
- 创建Web服务项目并导入目标WSDL文件
- 右键WSDL选择「生成客户端」,指定Apache Axis2为运行时、Tomcat 8.5为服务器运行时
- 触发报错,核心异常信息:
Exception occurred during code generation for WSDL : null java.lang.NoSuchMethodException: org.apache.axis2.wsdl.codegen.CodeGenConfiguration.<init>(java.util.Map) at java.base/java.lang.Class.getConstructor0(Class.java:3585) at java.base/java.lang.Class.getConstructor(Class.java:2271) at org.eclipse.jst.ws.axis2.consumption.core.command.Axis2ClientCodegenCommand.execute(Axis2ClientCodegenCommand.java:157) // 后续堆栈信息省略
注:Axis2 v1.7.9可正常生成,v1.8.0、v1.8.2均失败
原因分析
Eclipse自带的WST Axis2插件(org.eclipse.jst.ws.axis2.consumption.core)基于旧版Axis2 API开发,Axis2 1.8.x对CodeGenConfiguration类进行了重构,移除了接收java.util.Map参数的构造方法,插件通过反射调用该构造方法时触发NoSuchMethodException,属于插件与新版本Axis2的兼容性问题。
解决方案
方案1:使用Axis2官方命令行工具生成客户端(推荐)
绕过Eclipse插件的兼容性限制,直接用Axis2原生工具生成代码:
- 下载Axis2 1.8.x的bin安装包(包含
wsdl2java工具) - 打开终端,进入Axis2安装目录的
bin文件夹 - 执行生成命令:
wsdl2java -uri /本地WSDL文件路径/xxx.wsdl -p 自定义包名(如com.xxx.client) -o 输出目录路径
- 将生成的Java代码复制到Eclipse项目中,添加Axis2 1.8.x的所有核心依赖jar包到项目构建路径
方案2:降级Eclipse版本(不推荐)
选择与Axis2 1.8.x兼容的旧版Eclipse(如2021-09及更早版本),这类版本的Axis2插件可能适配了1.8.x的API,但需注意旧版Eclipse可能存在安全漏洞。
方案3:手动修改Eclipse Axis2插件(进阶)
针对插件代码进行适配修改:
- 找到Eclipse安装目录下的
org.eclipse.jst.ws.axis2.consumption.core_xxx.jar文件 - 反编译
Axis2ClientCodegenCommand类,修改构造CodeGenConfiguration的逻辑:替换原反射调用Map参数构造方法的代码,改为使用无参构造+setter方法设置配置 - 重新打包插件jar并替换原文件(操作有风险,需熟悉Eclipse插件开发)
内容的提问来源于stack exchange,提问作者Cristina
相关产品推荐
相关产品推荐

