axis的discovery在排除commons-logging之后重新引入不要引1.2版本,尝试使用1.0版本
近来接手一个接口平移任务,把旧的接口平移至新平台中。
旧的接口使用了axis作为webservice工具,版本为1.4,在jar包中的META-INFO文件中可见
随后一切照步骤来,引入依赖,注意在discovery的jar中排除了commons-logging的依赖,因为其自动引入的commons-logging会引起冲突,这也是网上大部分解决方案,
排除,并重新引入commons-logging
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>javax.xml.rpc</groupId>
<artifactId>javax.xml.rpc-api</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
在上面依赖的基础上,再加上
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
到此,网络上的大多解决方案就完成的,但是我启动依旧报错,错误也没变,no such method,无法初始化之类的,就在这行开始执行,也就是axis开始初始化的时候
Call call = (Call) service.createCall();
随后我开始思考,commons-logging 1.2的依赖我不引入也可以在项目依赖目录下看到commons-logging1.2的jar包,这很可能是别的jar也依赖了commons-logging,并且做了排除,然后自动引入某个版本的commons-logging,即1.2版本,也就是说,我的commons-logging的依赖是存在的,就是1.2版本,但axis仍无法初始化
于是我开始排查
1 核对axis版本
2 验证jar是否引入齐全
3 确定commons-discovery中的commons-logging正确排除,写法无误
编译无问题,但是到上面那行代码依旧报错,接口无法走通。最后,我开始怀疑axis1.4是否依赖commons-logging1.2,于是尝试将commons-logging改为1.0重新引入,然后,接口直接通了
几乎所有网络方案给的都是commons-logging1.2对应axis1.4,思路没有错,是jar冲突,只是版本不太对。如果你也在处理类似的问题,希望这篇博客可以给你一点帮助