0

「クラス 'pkg.XSLTFunctions が見つかりません」というメッセージが表示されます。JRE 7 のエラーにより、Xalan を使用した XSL のコンパイルに失敗する。これは JRE 6 で完全に機能しました。ここに、私のアプリケーションの詳細をいくつか示します。

アプリケーションは、JNI を使用して JVM をロードし、JAR をシステム クラスローダーに追加し、JNI を使用してその JAR でクラスを実行する Win32 ネイティブ EXE です。次に、Java クラスは JAR 内から XSL を取り出し、コンパイルを試みます。

JAR には、Xalan Java 拡張機能である Java クラスも含まれており、XSL でそのように指定されています (以下を参照)。

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xalan="http://xml.apache.org/xalan"
    xmlns:util="xalan://testSoe.XSLTFunctions"                
    exclude-result-prefixes="p util xalan">

ただし、Xalan はこのコールバック クラスを見つけることができず、XSL のコンパイルは失敗します。でエラーになります

ExecGroup-0:err:ERROR:  'Cannot find class 'testSoe.XSLTFunctions'.'

これは JRE 6 で機能し、この問題は JRE 7 でのみ見られます。

ありがとう、ランジット

4

1 に答える 1

0

問題を理解しました。Xalan エンジン (JRE の内部) には、JVM で「SecurityManager」が設定されている場合はブーストラップ クラスローダーでコールバック クラスを検索するロジックがあり、それ以外の場合はシステム クラスローダーで検索します。上記の Win32 EXE は、RMI サーバーでもあります (JVM がロードされた後など)。JRE 7 は、そのプロセスが RMI サーバーになるように RMI 装置をセットアップする一環として、SecurityManager を設定する可能性があります。オフにした場合の影響を調査していますが、さらに先に進むための回避策があります。これを理解するためにJDKソースにデバッグを行いました!

于 2012-08-31T22:02:33.557 に答える