Es fällt mir schwer herauszufinden, woher das Problem kommt, also poste ich das in der Hoffnung, dass andere etwas Ähnliches woanders gefunden haben und freundlich genug sind, ihre Einsichten zu teilen.
> Ich verwende einen JBoss 5.0.1.GA Anwendungsserver, der auf einem Sun Java 1.6.0-13 JDK läuft. Für die WAR-Datei im generierten Web-Service verwende ich eine WS-Engine Axis2 1.4 , deren JAR-Dateien von Eclipse Galileo in das Verzeichnis WEB-INF/lib
des Projekts eingefügt werden, wenn der Webservice erstellt wird aus der angegebenen Klasse "worker" im Dynamic Web Project. Das entsprechende Code-Snippet folgt:
Dies ist der Fehler, den ich vom JBoss-Protokoll erhalte:
java.lang.LinkageError: Lader-Constraint-Verletzung: Beim Auflösen des Feldes "STRING" wird der Klassenlader (Instanz von org / jboss / classloader / spi / base / BaseClassLoader) der referenzierenden Klasse, javax / xml / xpath / XPathConstants, und der Klassenlader (Instanz von & lt; Bootloader & gt;) für den aufgelösten Typ des Feldes, javax / xml / namespace / QName, hat unterschiedliche Klassenobjekte für diesen Typ
Ich könnte die XPath.evaluate(String,Document)
verwenden - aber es gibt Fälle, in denen ich zum Beispiel ein XPathConstants.NODESET
bekommen muss, also ist es ein No-Go. Ich habe auch versucht, ein wenig zu fummeln, indem ich einige jboss-web.xml
-Dateien hier und da in der WAR-Datei verstreut habe, aber ohne Wirkung.
Was ich versuche zu verstehen, ist:
rt.jar
); $JBOSS_HOME/lib/endorsed/stax-api.jar
); und $JBOSS_HOME/server/deploy/MyProject.ear/MyProject.war/WEB-INF/lib/axis2-saaj-api-1.4.jar
und woden-impl-dom-1.0M8.jar
). jaxax.xml.namespace.QName
die Trauer. Vielen Dank im Voraus.
Es scheint, dass das Problem gelöst wurde, indem das Paket javax.xml.namespace.*
und die entsprechenden Klassen aus den bereitgestellten JAR-Dateien von Axis2 entfernt wurden. Nämlich, mit Axis2 1.4.1 (statt 1.4), habe ich diese JAR-Dateien neu gepackt:
axis2-saaj-api-1.4.1.jar
, indem javax.xml.namespace woden-impl-dom-1.0M8.jar
, indem javax Außerdem ist Eclipse in der Projektkonfiguration äußerst wählerisch. Bisher habe ich festgestellt, dass die Projektfacette für das dynamische Webprojekt mit einem dynamischen Webmodul der Version 2.4 erstellt werden muss (und nicht 2.5, wie es von. Vorgeschlagen wird) Standard), aber mit einer Java-Version 6 (wie der Zweig des verwendeten JDK). Ich weiß nicht, warum das passiert, ich nehme an, das Dynamic Web Modul Version 2.4, das standardmäßig mit Java 1.4 in Eclipse bindet, ist der Ort, an dem die Verwirrung entsteht. Ein bisschen Googeln hat mich dazu gebracht zu glauben, dass das Paket javax.xml erst nach Java 5 oder Java 6 in das JDK integriert wurde - daher die mögliche Verwechslung! Ich bin jedoch nicht gut genug, um zu untersuchen, ob das Problem damit zusammenhängt, wie Eclipse die Archivdateien zur Bereitstellung paketiert, so dass dies nur ein Verdacht ist, den ich bisher habe.
JBoss wird LinkageError
ausgeben, wenn der Klassenpfad der Anwendung Klassen enthält, die JBoss als "geschützt" betrachtet, d. h. es erlaubt nicht, dass die Anwendung ihre eigenen Kopien bestimmter Schlüssel-APIs enthält.
In diesem Fall sieht es so aus, als ob Ihre App eigene Kopien der javax.xml.xpath
API enthält, und möglicherweise auch einige andere, wie Sie bereits erwähnt haben.
Sie müssen alles aus den EAR / WAR-Verzeichnissen lib entfernen, das mit JBoss-eigenen Bibliotheken kollidiert (z. B. axis2-saaj-api-1.4.jar
).
Tags und Links java classloader xpath jboss