XPath-Klassenauflösung in JBoss5

8

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:

%Vor%

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:

  • Woher könnte der Fehler kommen? Der JBoss-Klassenlader? Irgendeine seltsame Interaktion zwischen JBoss und dem Sun JDK? Irgendeine Verrücktheit, die von Eclipse beim Erstellen des Web Service eingeführt wurde? Vielleicht etwas Verwirrung durch die Axis2-Bibliotheken, die in WAR implementiert wurden?
  • Ich habe Instanzen kompilierter Klassendateien in einem Triple-Whammie gefunden:
    • Sun JDK (Datei rt.jar );
    • JBoss-Bibliotheken ( $JBOSS_HOME/lib/endorsed/stax-api.jar ); und
    • Axis2-implementierte Bibliotheken ( $JBOSS_HOME/server/deploy/MyProject.ear/MyProject.war/WEB-INF/lib/axis2-saaj-api-1.4.jar und woden-impl-dom-1.0M8.jar ).
  • Wie genau soll ich JBoss konfigurieren, um zu sagen, welche Klassen aus "anderen" Bibliotheken geladen werden können? Insbesondere verursacht die jaxax.xml.namespace.QName die Trauer.

Vielen Dank im Voraus.

    
jbatista 14.07.2010, 15:19
quelle

2 Antworten

4

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
  • entfernt wird
  • woden-impl-dom-1.0M8.jar , indem javax
  • entfernt wird

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.

    
jbatista 21.07.2010, 20:42
quelle
7

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 ).

    
skaffman 14.07.2010 15:28
quelle

Tags und Links