JavaWebStartの混合コードエラーを乗り越えるのに問題があります。要約すると、メインのJNLPファイルがあり、直接ロードするすべてのコードに署名しました。メインのJNLPにall-permissionsオプションを追加しました。ロードするメインクラスも、署名されたjarから取得されます。
メインクラスが少し先に開始すると、JNLP Bからプルされた署名されていないリソースをロードする必要があるものがいくつか起動されます。JNLPBのリソースはいずれも署名されておらず、特別な権限は必要ありません。
署名されたコードはすべて、Oracleの混合コードのドキュメントに基づいて設定されており、jarファイルは署名前に「Trusted-Library:true」のマニフェストで設定されています。
署名されていないコードを署名されたコードでロードしようとすると、次のようなクラスが見つからないというエラーが発生します。
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/some/external/package/that/is/not/signed
at org.our.signed.package.main(Main.java:87)
... 9 more
Caused by: java.lang.ClassNotFoundException: org.some.external.package.that.is.not.signed
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 10 more
JNLPのシナリオは次のとおりです。
JNLP A :(要約)
<jnlp spec="1.5+" codebase="...." href="......">
<information>
...etc
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+" initial-heap-size="80m" max-heap-size="256m" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="signedJar_1.jar" download="eager" main="true"/>
<jar href="signedJar_2.jar" download="eager" main="false"/>
<extension name="unsigned_ext" href="unsigned.jnlp"/>
</resources>
<application-desc main-class="(FROM SIGNED CLASS in signedJar_1.jar)"/>
</jnlp>
JNLP B(unsigned.jnlpローダー)
<jnlp spec="1.5+" codebase="....." href="......">
<information>
...etc
</information>
<resources>
<jar href="unsigned.jar"/>
</resources>
<component-desc/>
</jnlp>
署名されていないjarをすべての権限があり署名されたjarを持つJNLPに移動すると、Javaでは署名されたコードを混合できないという予想されるセキュリティ例外が発生するため、セキュリティ例外が正しく機能していることに注意してください。 Trusted-Library:マニフェスト属性のない真の署名されていないコード。
アイデア?クラスローダーが署名されていないコードからJavaファイルを見つけられない理由はありますか?署名されたコードが署名されていないコードを実行できるようにするために欠けている特別なものはありますか?私は、署名されたコードを実行するために署名されていないコードを取得する際に問題が発生する場合のみを見てきました。これは理解できます。