Pergunta

Encontramos uma classe muito estranha que não encontrou problema em nosso aplicativo da web em execução no WebLogic 10.3. Em nosso código, fazemos uma transformação XSLT bastante padrão.

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

Isso falha em nosso ambiente de produção (Solaris 10, se isso importa) e produz um 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 aula faz parte do RT.Jar e está definitivamente em ClassPath. Isso é verificado pelo seguinte snippet WebLogic Log:

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

E, finalmente, listar o conteúdo da RT.Jar mostra que a 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

Então, o que diabos poderia ser o problema aqui?

Foi útil?

Solução

NoclassDeffoundError não significa necessariamente que a classe não foi encontrada - significa versão correta da classe não foi carregada.

Provavelmente, várias versões da classe são carregadas. Você pode verificar se existe uma fonte de conflito - exemplo, algumas classes também são incluídas no weblogic.jar.

Verifique este pacote org/apache/xalan/interno/xsltc/runtime/baselibrary ou a própria classe BaseLibrary - está presente?

Ou tente colocar o Rt.jar como o primeiro frasco no caminho de classe

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top