项目开发。调用webservice,方法调用报了 Java.Lang.NoSucheMethod..........,印象中记得是jar包冲突,maven项目,一看,这一堆jar包...用eclipse的pom可视化界面,Dependency Hierarchy 看到了不少包冲突,先从webservice 依赖的jar開始,顺着这一思路,一顿排除,没管用。
网上搜了几篇文章。梳理了下解决这个问题的思路:
1、你调的类里缺少该方法,可能是因为jar包的版本号不正确
2、项目依赖的jar包,A包和B包有同样的类(比方a类)。你的目标是调用A包a类,结果被后载入的B包覆盖了,结果无意中调用了B包a类
3、项目尽管仅仅有A包,但你的应用server(容器) 包括了B包。他们含有同样的类。从网上得知在weblogic9.2中公布cxfwebservice有这一问题
既然是这样,就不从刚推測的jar包冲突入手。而是从缺少方法的类入手,追本溯源。
先看我碰到的错误内容:
javax.servlet.ServletException: java.lang.NoSuchMethodError: **.**.client.clientbean.ServiceSoap.getOrderById(JZLjava/util/List;)L**/**/client/clientbean/Order;
这句话有类路径。在加上异常里提供的堆栈信息,应该能高速定位到哪个包里的哪个类。到类里看一眼,有没有你要调用的方法(这里是getOrderById)。没有的情况一般非常少。包里没方法,在写代码的时候预计也不会调用这种方法。
假设有。那么看看别的包里是否也存在相同的包,相同的类。我今天遇到的错误就是这种:oom包有ServiceSoap,order包还有ServiceSoap。在推断oom包未用到,之后。果断排了,bug攻克了。
添加知识广度和深度,耐心分析应该是高速解决bug的法门所在。everyone 共勉!