项目中调用 CXF 报错
java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;
找到报错代码 :
// CXF 方式调用
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(WSDL);
简单查了下是依赖起了冲突 ,锁定问题依赖为 wsdl4j 。
在 lib 里依次排查 ,发现 axis 引入了一个 wsdl4j ,版本为 1.5.1 。这个版本的 wsdl4j 没有我们需要的方法 。
项目中同时还存在一个 1.6.2 的 wsdl4j ,这个才是我们需要的 。
那么问题就很简单了 ,我们修改 pom 文件依赖 ,将
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
修改为 :
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
<exclusions>
<exclusion>
<groupId>org.apache.axis</groupId>
<artifactId>wsdl4j</artifactId>
</exclusion>
</exclusions>
</dependency>
剔除掉了 axis 自带的 wsdl4j ,问题解决 。