XPath-Auflösung der Klasse in JBoss5
Ich habe eine harte Zeit, herauszufinden, wo das problem herkommt, also ich bin dieses posting, in der Hoffnung, dass andere vielleicht auch was ähnliches gefunden, um diese an anderer Stelle und sind freundlich genug, zu teilen Ihre Einsicht.
Ich bin mit einem JBoss-5.0.1.GA application server läuft auf der Spitze eines Sun Java 1.6.0-13 JDK. Für die war-Datei in den generierten Web-Service, ich benutze ein Axis2 1.4 WS-Motor, dessen JAR-Dateien eingefügt werden, indem Eclipse Galileo in das Projekt WEB-INF/lib
- Verzeichnis bei der Erstellung des Webservice-von den gegebenen "worker" - Klasse in das Dynamische Web-Projekt. Die relevanten code-snippet folgt:
String sUrl = "http://example.com/datafile.xml";
String sPath = "/some/xpath/string";
InputStream input = new URL(sUrl).openStream();
InputSource source = new InputSource(input);
DocumentBuilderFactory docFact = DocumentBuilderFactory.newInstance();
docFact.setNamespaceAware(false);
DocumentBuilder parser = docFact.newDocumentBuilder();
Document doc = parser.parse(source);
XPath xpath = XPathFactory.newInstance().newXPath();
//error occurs here:
String result = (String) xpath.evaluate(path,doc,XPathConstants.STRING);
input.close();
Dies ist der Fehler, ich bin immer von der JBoss-log:
java.lang.LinkageError: loader-constraint-Verletzung: beim auflösen Feld "STRING" die Klasse loader (Instanz von org/jboss/classloader/spi/base/BaseClassLoader) des referenzierenden Klasse javax/xml/xpath/XPathConstants, und der class-loader (Instanz <bootloader>) für das Feld ist gelöst type, javax/xml/namespace/QName, haben die verschiedenen Klassen von Objekten für diesen Typ
Ich könnte Verwendung der XPath.evaluate(String,Document)
— jedoch gibt es Gelegenheiten, wo ich brauche, um (zum Beispiel) eine XPathConstants.NODESET
statt, so ist es ein no-go. Ich habe auch versucht zu fummeln, ein wenig durch littering einige jboss-web.xml
Dateien, die hier und da in der war-Datei, jedoch ohne Wirkung.
Was ich versuche, zu verstehen ist:
- Wo könnte der Fehler kommen? Die JBoss-class-loader? Einige seltsame Interaktion zwischen JBoss und Sun JDK? Einige Verrücktheit eingeführt von Eclipse beim erstellen der Web Service? Vielleicht einige Verwirrung, eingeführt durch die Axis2 Bibliotheken bereitgestellt in den KRIEG?
- Ich gefunden habe, die Instanzen von kompilierten class-Dateien in dem, was aussieht, wie ein triple-whammie:
- Sun JDK (Datei
rt.jar
); - JBoss-Bibliotheken (
$JBOSS_HOME/lib/endorsed/stax-api.jar
); und - Axis2-Bibliotheken bereitgestellt (
$JBOSS_HOME/server/deploy/MyProject.ear/MyProject.war/WEB-INF/lib/axis2-saaj-api-1.4.jar
undwoden-impl-dom-1.0M8.jar
).
- Sun JDK (Datei
- Wie soll ich da genau konfigurieren Sie JBoss, um mitzuteilen, welche Klassen es ist OK, um das laden aus der "anderen" Bibliotheken aus? Insbesondere die
jaxax.xml.namespace.QName
ist die Ursache der Trauer.
Vielen Dank im Voraus.
- Beachten Sie auch, dass in der JDK ' s rt.jar die javax.xml.xpath.XPath ist ein interface, daher muss es umgesetzt werden elsehwere...
Du musst angemeldet sein, um einen Kommentar abzugeben.
JBoss werfen wird
LinkageError
wenn die Anwendung classpath enthält Klassen, die die JBoss Auffassung, "geschützt", d.h. es erlaubt nicht die Anwendung zu enthalten, die eigene Kopien bestimmter Schlüssel-APIs.In diesem Fall, es sieht aus wie Ihre appcontains seine eigenen Kopien der
javax.xml.xpath
API, und vielleicht einige andere auch, wie du schon erwähnt hast.Müssen Sie entfernen alles aus Ihrer EAR - /war-die lib-Verzeichnisse, die Auseinandersetzungen mit dem JBoss-eigenen Bibliotheken (z.B.
axis2-saaj-api-1.4.jar
).Es scheint, dass das problem wurde gelöst durch das entfernen der
javax.xml.namespace.*
Paket und die jeweiligen Klassen von Axis2 bereitgestellt JAR-Dateien. Nämlich, mit Axis2 1.4.1 (statt 1.4), ich umgepackt diese JAR-Dateien:axis2-saaj-api-1.4.1.jar
durch entfernen javax.xml.namespacewoden-impl-dom-1.0M8.jar
durch entfernen javaxAuch Eclipse ist sehr wählerisch bei der Projekt-Konfiguration. Bisher habe ich herausgefunden, dass der Projekt-Facette für das Dynamische Web-Projekt hat erstellt werden, mit einem Dynamic Web Module version 2.4 (und nicht 2.5 wie es schlägt standardmäßig), aber mit einem Java-version 6 (gleich wie der Zweig der verwendeten JDK). Ich weiß nicht, warum dies geschieht, ich nehme an, das Dynamic Web Module version 2.4 binden standardmäßig mit Java 1.4 in Eclipse ist, wo die Verwirrung herkommt. Einige googeln führte mich zu glauben, dass Paket javax.xml nicht werden, fließen in die bis JDK Java 5 oder Java 6-daher auch die mögliche Verwechslung! Allerdings bin ich nicht kompetent genug, zu untersuchen, ob das problem kommt von der Art wie die Eclipse-Pakete, die Archiv-Dateien für die Bereitstellung, also das ist nur ein Verdacht, den ich habe, so weit.