Question

I have an applet that references 2 signed jars:

  • myapplet.jar
  • jackson-all-1.9.9.jar

When starting the applet the second time (first time is without errors), I get this:

Exception in thread "thread applet-main.MyApplet-1"
java.lang.ExceptionInInitializerError
              at org.codehaus.jackson.map.deser.StdDeserializerProvider.<init>(StdDeserializerProvider.java:81)
              at org.codehaus.jackson.map.ObjectMapper.<init>(ObjectMapper.java:398)
              at org.codehaus.jackson.map.ObjectMapper.<init>(ObjectMapper.java:358)
              at org.codehaus.jackson.map.ObjectMapper.<init>(ObjectMapper.java:328)
              at net.Remote.<init>(Remote.java:50)
              at main.Env.init(Env.java:44)
              at main.MyApplet.init(MyApplet.java:25)
              at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
              at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.SecurityException: Prohibited package name: java.util
              at java.lang.ClassLoader.preDefineClass(Unknown Source)
              at java.lang.ClassLoader.defineClassCond(Unknown Source)
              at java.lang.ClassLoader.defineClass(Unknown Source)
              at java.security.SecureClassLoader.defineClass(Unknown Source)
              at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
              at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
              at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
              at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
              at java.lang.ClassLoader.loadClass(Unknown Source)
              at java.lang.Class.forName0(Native Method)
              at java.lang.Class.forName(Unknown Source)
              at org.codehaus.jackson.map.deser.BasicDeserializerFactory.<clinit>(BasicDeserializerFactory.java:74)
              ... 9 more

The line in question is the first one in the following try-catch block:

try {
    Class<?> key = Class.forName("java.util.ConcurrentNavigableMap");
    Class<?> value = Class.forName("java.util.ConcurrentSkipListMap");
    @SuppressWarnings("unchecked")
        Class<? extends Map<?,?>> mapValue = (Class<? extends Map<?,?>>) value;
    _mapFallbacks.put(key.getName(), mapValue);
} catch (ClassNotFoundException cnfe) { // occurs on 1.5
}

A couple of things I do not understand:

  • Why does my Java7 JVM not take it out of its runtime library? But rather
  • Why does it try to download /java/util/ConcurrentNavigableMap.class from my server, which obviously fails with a 404?
  • As that fails, why does it try to re-download myapplet.jar 25 times in rapid succession, each time successfully (200), and each time returning the same jar file?

Update I'm not sure whether the 25 retries are caused by the class loader trying to load the class, it might be some other code trying to load a resource (which would still be odd, but not related to the CurrentNavigableMap issue), so I'll exclude that from my question.

N.B. I guess it does not try to re-download the jackson jar file, as that one is listed in the cache_archive attribute.

Was it helpful?

Solution

Is this?

wrong:

Class.forName("java.util.ConcurrentNavigableMap");

Correct:
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/package-tree.html

Class.forName("java.util.concurrent.ConcurrentNavigableMap");
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top