I made more investigations and I managed to reproduce the issue with only the Felix framework (4.2.1 and 4.3).

This warning dialog appears in framework/BundleWiringImpl.java (line 1320) when it try to find a class which doesn't exist "Class.forName("dalvik.system.DexFile");"

I can reproduce the issue with the contextClassloader which is JNLPClassLoader: ClassLoader cl2 = Thread.currentThread().getContextClassLoader();
            try {
                 Class.forName("dalvik.system.DexFile", true, cl2);
            } catch (Throwable e) {
                e.printStackTrace();
            }

Error:
java.lang.RuntimeException: ExitException[ 0]java.lang.SecurityException: User declined to run unsigned sandbox app
    at com.sun.jnlp.JNLPClassLoader.getTrustedCodeSources(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler$ParentCallback.strategy(Unknown Source) at com.sun.deploy.security.CPCallbackHandler$ParentCallback.openClassPathElement(Unknown Source) at com.sun.deploy.security.DeployURLClassPath$UrlLoader.<init>(Unknown Source)
    at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
    at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:358)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:270)
at org.apache.felix.framework.BundleWiringImpl.<clinit>(BundleWiringImpl.java:1325) at org.apache.felix.framework.StatefulResolver.markResolvedRevisions(StatefulResolver.java:938) at org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:427)
    at org.apache.felix.framework.Felix.init(Felix.java:684)
    at org.weasis.launcher.WeasisLauncher.launch(WeasisLauncher.java:347)
    at org.weasis.launcher.WebstartLauncher.main(WebstartLauncher.java:58)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    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(Thread.java:744)
Caused by: ExitException[ 0]java.lang.SecurityException: User declined to run unsigned sandbox app at com.sun.javaws.security.AppPolicy.grantRestrictedAccess(Unknown Source)
    at com.sun.javaws.security.AppPolicy.addPermissions(Unknown Source)
    ... 34 more


... but with the system SystemClassLoader "sun.misc.Launcher$AppClassLoader" or with null it triggers the normal exception "ClassNotFoundException" without security dialog.

I managed to pass the felix.init() without having the dialog by changing in 3 places in the framework "Class.forName("class");" by "Class.forName("class", true, null);". However, I get the security dialog with Gogo bundle starting, so it doesn't seem to be a good way to fix the issue.

I also notice that once the dialog has appeared, JNLPClassLoader has a normal behavior.

You'll find a simple test case (https://issues.apache.org/jira/browse/FELIX-4281) which try to find a class with JNLPClassLoader (same as Felix does), but the dialog never appears !!!!!

This bug is elusive. It doesn't appears in debug mode and I really don't see the difference when running Felix or not (printing all the variable of JNLPClassLoader doesn't show any differences). I guess there is a contextual difference but where?

Setting "System.setSecurityManager(null)" doesn't help.

Nicolas

Le 23. 10. 13 22:57, Nicolas Roduit a écrit :
Hi all,

I had JNLP file in https://issues.apache.org/jira/browse/FELIX-4281 to show the issue. The problem seems to be located in the Felix initialization, but I am not 100% sure because I modified felix.Main (https://github.com/nroduit/Weasis/blob/master/weasis-launcher/src/main/java/org/weasis/launcher/WeasisLauncher.java) and the problem doesn't appear when I try to debug Java Web Start with the command: javaws -verbose -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 viewer.jnlp

Even "javaws -verbose viewer.jnlp" doesn't show the security message but "javaws viewer.jnlp" does! And the application loads correctly when you cancel the security message!

Nicolas


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
For additional commands, e-mail: users-h...@felix.apache.org

Reply via email to