我知道java.lang.NoSuchMethodError
意味着用於編譯的類的版本與運行時使用的版本不同。通常,當我看到這個問題時,我以java -verbose
模式啓動app.server,它告訴我加載類的jar文件。如果那個jar文件不是我打算使用的那個,我知道我使用了一個不正確的jar文件版本。如何解決java.lang.NoSuchMethodError?
我使用的另一種方法是使用javap
查看我在運行時使用的jar文件中類的方法簽名,以確認jar確實包含具有不同方法簽名的類。
我看到這個錯誤現在在卡拉夫,一個OSGi容器,並沒有上述方法正在幫助。 java -verbose
向我展示了jar,javap
顯示了方法簽名,方法簽名與錯誤堆棧跟蹤中的相同。換句話說,我可以看到在運行時使用的jar中的類確實具有與jvm所說找不到的相同的方法簽名。
這裏是確切的堆棧跟蹤,如果有幫助:
java.lang.NoSuchMethodError: org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(Ljava/io/InputStream;Ljava/lang/String;)Lorg/apache/axiom/soap/SOAPModelBuilder;
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:55)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:179)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:145)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:108)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:67)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:354)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at org.wso2.carbon.authenticator.stub.AuthenticationAdminStub.login(AuthenticationAdminStub.java:659)
有沒有我可以/應該使用任何其他方法?謝謝你的幫助。
你從哪裏學到這門課?你從服務中獲得了嗎?你使用Maven還是任何依賴管理庫? – Peter 2013-05-21 19:13:44
你好,約翰,你最終是否解決了這個問題並找到了原因?我在這裏面對同樣的問題。 – 2016-01-26 21:06:30