2008-09-25 15 views
5

Wir haben eine Webanwendung, die auf vielen Anwendungsservern einschließlich Oracle 10g bereitgestellt werden kann. Auf dieser Plattform haben wir jedoch Classpath-Probleme. Die Webanwendung verwendet JAXB 2, aber Oracle 10g wird mit JAXB 1 ausgeliefert, was zu Fehlern führte. Um dies zu umgehen, haben wir Oracle so konfiguriert, dass es Klassen in unserer Webanwendung vorzieht, aber jetzt erhalten wir den obigen Fehler, wenn wir versuchen, einen JAXB-Kontext zu instanziieren."Loader-Einschränkungen verletzt, wenn javax/xml/namespace/QName-Klasse verknüpft" von webapp auf Oracle 10g

Die Ausnahme "loader constraints violated" wird scheinbar ausgelöst, wenn eine Klasse, die mit einem Klassenlader geladen wurde, versucht, auf etwas zuzugreifen, das im selben Paket privat ist, aber von einem anderen Klassenlader geladen wird. Ich habe versucht, alle jars in unserer Webanwendung zu entfernen, die javax.xml.namespace.QName enthalten, und haben überprüft, dass es sich um die in Oracle enthaltene Instanz handelt, die gerade aufgerufen wird. Der Fehler tritt jedoch immer noch auf. Irgendwelche Ideen?

(Dies ist ein Follow-on von einem earlier question über 10g und JAXB 2.)

+0

Ich weiß, das geht zurück, aber haben Sie eine praktikable Lösung gefunden? – jlpp

+0

Was hast du gefunden? –

Antwort

1

Welche Java-Version verwenden Sie? Die neuesten Versionen werden mit dieser Klasse im rt.jar ausgeliefert.

+0

1.5.0_06 Das scheint es zu enthalten. Ich weiß allerdings nicht, wie ich das umgehen soll. Es ist eindeutig keine Option, es von der Webapp und Orakel selbst zu entfernen. – alexmcchessers

0

Vielleicht ist es völlig unabhängig, aber ich erinnere mich an ein Problem, das Weblogic mit der gleichen Klasse hatte. Der Grund für das Problem war die geänderte Serien-ID der Klasse (Sun änderte sie versehentlich). Die Problemumgehung bestand darin, der JVM eine -Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID = 1.0 bereitzustellen.

Könnte es das gleiche Problem sein, nur falsch berichtet? Versuch es.

Siehe hier: http://forums.bea.com/thread.jspa?threadID=600014563

3

Diese Klasse ist in den WS Java Hälfte Bibliotheken gibt. Es ist wirklich einfach, es von mehreren Klassenladern zu laden und später zu vergleichen, was zu einem LinkageError führt.

Ein effektive (aber Vorschlaghammer) Technik, um dies zu aufzuspüren ist Classloader von dem Java-Quellcode zu modifizieren, welche jar dieser besonderen Klasse-Dump wird von zur Ladezeit einlegen, müssen Sie Ihre bootclasspath mit Ihrer modifizierten Version setzt:

-Xbootclasspath/p:/path/to/hackedBin

0

Können Sie nur das JAXB jar unter dem Ordner lib des Anwendungsservers aktualisieren?