2008-09-25 15 views
5

Nous avons une application Web qui peut être déployée sur de nombreux serveurs d'applications, y compris Oracle 10g. Sur cette plate-forme, cependant, nous avons des problèmes de classpath. La webapp utilise JAXB 2, mais Oracle 10g est livré avec JAXB 1, ce qui provoquait des erreurs. Pour contourner ceux que nous avons configurés Oracle pour préférer les classes dans notre webapp, mais maintenant nous obtenons l'erreur ci-dessus en essayant d'instancier un contexte JAXB. En levant l'exception "loader constraints violated", elle semble être levée lorsqu'une classe qui a été chargée avec un chargeur de classe tente d'accéder à un paquet privé dans le même paquet mais chargé par un chargeur de classe différent. J'ai essayé de supprimer tous les jars dans notre webapp qui incluent javax.xml.namespace.QName, et j'ai vérifié que c'est l'instance incluse dans Oracle qui est en cours de récupération, mais l'erreur se produit toujours. Des idées?"Les contraintes du chargeur sont rompues lors de la liaison de la classe javax/xml/namespace/QName" de webapp sur Oracle 10g

(Ceci est un suivi à partir d'un earlier question concernant 10g et JAXB 2.)

+0

Je sais que ça revient, mais avez-vous trouvé une solution viable? – jlpp

+0

Qu'avez-vous trouvé? –

Répondre

1

Quelle version de Java utilisez-vous? Les versions les plus récentes sont livrées avec cette classe dans le fichier rt.jar.

+0

1.5.0_06 Cela semblerait l'inclure. Je ne sais pas comment contourner cela, cependant. Le supprimer à la fois de la webapp et de l'oracle n'est clairement pas une option. – alexmcchessers

0

Peut-être que c'est complètement sans rapport, mais je me souviens d'un problème que Weblogic avait avec la même classe. La raison du problème était le numéro de série modifié de la classe (Sun l'a changé accidentellement). La solution de contournement consistait à fournir un -Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID = 1.0 à la JVM.

Pourrait-il être le même problème, juste mal rapporté? Essayez-le.

Voir ici: http://forums.bea.com/thread.jspa?threadID=600014563

3

Cette classe est dans la moitié des bibliothèques Java WS là-bas. Il est très facile de le charger à partir de plusieurs chargeurs de classes et de les comparer ensuite, ce qui provoque une erreur LinkageError.

Un efficace (mais marteau de forgeron) technique pour le suivi de cette baisse est de modifier Classloader de la source Java pour vider which jar cette classe particulière chargement à partir au moment du chargement, préfixer alors votre bootclasspath avec votre version modifiée:

-Xbootclasspath/p:/path/to/hackedBin

0

Pouvez-vous simplement mettre à jour le fichier JAXB dans le dossier lib du serveur d'applications?