Beratung im Umgang mit java.lang.NoSuchMethodError
Hier ist die Fehlermeldung die ich erhalte:
java.lang.NoSuchMethodError: com.Order.getList(Lepo/User;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/ArrayList;
Nach dem dekompilieren der Klassen, fand ich, dass es eine "Ljava/lang/String" als ersten parameter. Wie Sie sehen können, indem der Fehler, der parameter fehlt. Also ich dekompiliert die aufrufende Methode ist Klasse und es macht einen einen string als ersten parameter.
Dies ist, wo ich bin ein wenig verwirrt, was hier passiert. Das Letzte mal, dieser code geändert wurde, wurde 2007 nach den timestamps. Dieser Fehler zeigte sich vor etwa einer Woche.
Dies ist eine struts-Anwendung auf JBoss 4.0.0DR3. Meines Wissens gibt es bisher keine software-upgrades auf dem server.
Ich habe auch versucht, beenden von JBoss sind, löschen aller temp-Verzeichnisse und Neustart.
Hat jemand irgendwelche Vorschläge, um den nächsten Schritt zu nehmen?
Edit:
Hier ist der stacktrace
java.lang.NoSuchMethodError: com.Order.getList(Lepo/User;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/ArrayList;
at com.ViewStatusAction.retrieveList(ViewStatusAction.java:325)
at com.ViewStatusAction.executeAction(ViewStatusAction.java:115)
at com.BaseAction.execute(BaseAction.java:42)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
Sind Sie immer die "aufrufende Methode aus der Klasse" aus dem stacktrace, oder was?
Ja der code dekompiliert ist die gleiche version wie der running app.
Ist es möglich, dass Sie entfernt ein weiteres Glas aus dem classpath, wobei das Glas hatte die "gleiche Klasse", aber eine andere version? Das heißt, diese "gleichen Klasse" wurde überstrahlt die anderen, aber einmal entfernt, die "unvereinbar-Klasse" in Frage manifestiert? Dies wäre ein classpath "race condition".
InformationsquelleAutor chafnan | 2012-10-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gehe ich davon aus, dass sowohl die
com.Order
undcom.ViewStatusAction
sind Anwendungs-code, nicht 3rd-party-code.Ausnahme bedeutet, dass Sie einen Versionskonflikt.
Den
ViewStatusAction
Klasse erwartet, dass eine Methode inOrder
mit dieser Signatur:Den
Order
Klasse nicht deklarieren Sie eine Methode mit dieser Signatur. (Es kann eine andere Signatur, oder es kann nicht existieren.)Wenn Sie ursprünglich zusammengestellt
ViewStatusAction
der compiler in der Lage war zu finden, daß Methode. Aber jetzt, das runtime-system nicht finden können, es nicht mehr. Dies kann nur bedeuten, dass Sie mit einer anderen version vonOrder
um die eine, die IhreViewStatusAction
Klasse kompiliert wurde gegen.Müssen Sie herausfinden, warum du hast jetzt diese Diskrepanz. Mögliche Erklärungen sind:
Sie bereitgestellt haben, eine neue version von einer der Klassen, ohne Implementierung der neuen version des anderen.
Sie bereitgestellt haben, eine out-of-date-version von einer der Klassen.
Haben Sie zwei Versionen von der einen oder anderen Klassen in Ihrer Klasse Weg und Sie haben unwissentlich verändert die classpath-Suche um.
Was Sie tun müssen, ist herauszufinden, wo die inkompatible Klassen kommen, und wie Sie es bekommen. Sobald Sie, dass herausgefunden haben, ist das Update wahrscheinlich sein, selbstverständlich.
Ich beachten Sie, dass Ihre FQ Klasse Namen doen nicht entsprechen anerkannten standards:
(Es ist möglich, dass Ihr problem könnte eine fall-out der Festsetzung der Schein
Lepo.User
name ...)So, nach dem Graben um den JBoss deploy Ordner fand ich, dass der Unterricht kopiert und in ein anderes Verzeichnis. So gab es eine Klasse, die älter war, ausgeführt wurde. Vielen Dank für die Hilfe!
"umbenannt habe ich die Klassen hier. Sie sind in einem anderen namespace, dann habe ich hier." - In der Zukunft, NICHT. Es verwirrt nur die Dinge, wenn Sie manipulieren die Beweise.
InformationsquelleAutor Stephen C
Wahrscheinlich die runtime jar ist Verschieden von dem Glas, das Sie verwenden, um Ihren code kompilieren. Sie können auch mehrere jars in den Klassenpfad enthält die gleiche Klasse und shadowing jeder andere. Sie Mai wollen überprüfen Sie Ihre app-server-runtime-classpath und jar-Bestellung.
InformationsquelleAutor hgh