Pregunta

Hemos encontrado un problema muy extraño de clase no encontrada en nuestra aplicación web que se ejecuta en Weblogic 10.3.En nuestro código hacemos una transformación XSLT bastante estándar.

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

Esto falla en nuestro entorno de producción (Solaris 10, si eso importa) y produce 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>

Esta clase es parte de rt.jar y definitivamente está en classpath.Esto se verifica mediante el siguiente fragmento de registro de Weblogic:

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

Y finalmente enumerar el contenido de rt.jar muestra que la clase está ahí:

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

Entonces, ¿cuál podría ser el problema aquí?

¿Fue útil?

Solución

NoClassDefFoundError no significa necesariamente que no se haya encontrado la clase, sino que versión correcta de la clase no estaba cargado.

Lo más probable es que se carguen varias versiones de la clase.¿Puede comprobar si hay una fuente de conflicto? Por ejemplo, algunas clases también están incluidas en weblogic.jar.

Verifique este paquete org/apache/xalan/internal/xsltc/runtime/BasisLibrary o la propia clase BasisLibrary: ¿está presente?

O intente poner rt.jar como el primer jar en el classpath

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top