记一次jar包冲突导致的NoSuchMethodError

记一次jar包冲突导致的 NoSuchMethodError

对接 webService 的时候,项目本身一直是用动态调用的,但是有部分代码出于技术原因使用的是生成的代码调用,然后引入了一个新的jar包

		<dependency>
			<groupId>axis</groupId>
			<artifactId>axis</artifactId>
			<version>1.4</version>
		</dependency>

运行新的代码没有问题,运行原有的动态调用的代码,就开始报错了。

java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;

一般 NoSuchMethodError 通常就是 jar 包冲突了,我们搜索 javax.wsdl.xml.WSDLReader ,发现果然有两个

全局搜索

我们继续查找一下我们需要调用的方法 readWSDL 在哪一个类里面。发现是新导入的包里面没有这个方法,然后我们把新导入的包里面这个jar包剔除掉

		<dependency>
			<groupId>axis</groupId>
			<artifactId>axis</artifactId>
			<version>1.4</version>
			<exclusions>
				<exclusion>
					<artifactId>axis-wsdl4j</artifactId>
					<groupId>axis</groupId>
				</exclusion>
			</exclusions>
		</dependency>

再启动一下,两个都能正常运行啦