transfert XSLT échoue parce que Weblogic ne peut pas trouver une classe située dans rt.jar
-
19-09-2019 - |
Question
Nous avons rencontré une classe très étrange de ne pas problème trouvé dans notre application web fonctionnant sur Weblogic 10.3. Dans notre code, nous faisons une transformation XSLT assez standard.
UtilRequestManagerBean.java:
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(new StringReader(xslBuffer.toString())));
transformer.transform(new StreamSource(new StringReader(sourceBuffer.toString())), new StreamResult(sw));
Cela échoue dans notre environnement de production (Solaris 10, si cela importe) et produit un java.lang.NoClassDefFoundError:
<Mar 11, 2010 1:44:08 PM EET> <Info> <EJB> <BEA-010227> <EJB Exception occurred during invocation from home or business: com.company.basicservice.ejb.util.UtilRequestManagerBean_temuyq_HomeImpl@1737be7 threw exception: java.lang.NoClassDefFoundError: Could not initialize class com.sun.org.apache.xalan.internal.xsltc.runtime.BasisLibrary>
Cette classe fait partie de rt.jar et est sans aucun doute dans classpath. Ceci est vérifié par l'extrait de journal de Weblogic suivant:
sun.boot.class.path = /opt/jdk1.6.0_12/jre/lib/resources.jar:/opt/jdk1.6.0_12/jre/lib/rt.jar:/opt/jdk1.6.0_12/jre/lib/sunrsasign.jar:/opt/jdk1.6.0_12/jre/lib/jsse.jar:/opt/jdk1.6.0_12/jre/lib/jce.jar:/opt/jdk1.6.0_12/jre/lib/charsets.jar:/opt/jdk1.6.0_12/jre/classes
Et la liste enfin le contenu de rt.jar montre que la classe est là:
jar tvf /opt/jdk1.6.0_12/jre/lib/rt.jar | grep BasisLibrary.class
24787 Sat Jan 17 02:25:58 EET 2009 com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.class
Alors, qu'est-ce pourrait être le problème ici?
La solution
NoClassDefFoundError ne signifie pas nécessairement la classe n'a pas été trouvé. - cela signifie que le version correcte de la classe n'a pas été chargée
plusieurs versions les plus probables de la classe se charger. Pouvez-vous vérifier s'il y a une source de conflit -. Exemple, certaines classes sont regroupées dans weblogic.jar et
Vérifier pour cette org paquet / apache / xalan / interne / XSLTC / exécution / BasisLibrary ou la classe BasisLibrary elle-même - est-il présent
Ou essayez en mettant rt.jar comme le premier pot dans le classpath