これは投稿によって確認されてい ます https://forums.oracle.com/thread/2280127
Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/mixed_code.html#trusted_libraryによって確認されています
「Trusted-Libraryマニフェスト属性でマークされるjarファイルのコードは、クラスローダーに依存する呼び出しを使用する場合、わずかに変更する必要がある場合があります[...] Trusted-Libraryのコードは通常のローダーを検索できますThread.currentThread().getContextClassLoader().[...] を呼び出すことにより、一般的に、信頼できるライブラリ内のコードが慎重かつ安全な方法で記述されていること、および別の方法で別のライブラリにロードされることと互換性があることを確認するように注意する必要があります。アプリケーションの一部であり、通常のローダーによってロードされる残りの jar からのクラス ローダー インスタンス。」
「Thread.currentThread().getContextClassLoader().[...]」
信頼できる jar からサンドボックス jar にメソッドを呼び出す簡単なテストを行ったところ、リフレクションを使用してそれを実行したところ、うまくいきました。
信頼できるjarファイルでサンドボックスjarファイルクラスを使用するたびに、リフレクションを使用する必要があるようです(クラスをロードし、必要なメソッドを呼び出します)。これが先か。誰かがこれを確認できますか。
private void useReflection() { 試す {
// using normal class loader
Class<?> clazz = Class.forName("com.abc.bla.bla.SandBox", true, Thread.currentThread().getContextClassLoader());
Constructor<?> constructor = clazz.getConstructor();
Object obj = constructor.newInstance(new Object[] {});
Method method = clazz.getMethod("sayHello", new Class[] {});
method.invoke(obj, new Object[] {});
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
要約すると、サンドボックス jar ファイル (信頼されていない) をロードして通常のクラスローダーの使用を許可し、署名付き (信頼された) jar 用に設計された特別な import ステートメントを介してデフォルトのものを回避するために、リフレクションを使用する必要があるようです。マニフェストの追加属性に従って混合モードにあるファイル。