Weblogic が rt.jar にあるクラスを見つけられないため、XSLT 転送が失敗する
-
19-09-2019 - |
質問
Weblogic 10.3 で実行されている Web アプリで、非常に奇妙な「クラスが見つからない」問題が発生しました。私たちのコードでは、非常に標準的な XSLT 変換を実行します。
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));
これは実稼働環境 (重要な場合は Solaris 10) では失敗し、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>
このクラスは rt.jar の一部であり、必ずクラスパス内にあります。これは、次の 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
最後に rt.jar の内容をリストすると、クラスが存在することがわかります。
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
では、一体何が問題なのでしょうか?
解決
NoClassDefFoundError は、必ずしもクラスが見つからなかったことを意味するわけではありません。 正しいバージョン クラスのがロードされませんでした。
おそらく、クラスの複数のバージョンがロードされます。競合の原因があるかどうかを確認してください。たとえば、一部のクラスが weblogic.jar にもバンドルされています。
このパッケージ org/apache/xalan/internal/xsltc/runtime/BasisLibrary または BasisLibrary クラス自体を確認してください。存在しますか?
または、クラスパスの最初の jar として rt.jar を配置してみてください。
所属していません StackOverflow