2010-01-12 3 views
0

В нашем приложении используется класс MapMaker из коллекций Google, и мы «вы получите исключение ниже, но только на OS X 10.4, используя webstart. Он отлично работает при запуске из пакета приложений, а также в OS X 10.5 и Windows.

Это началось с нашего обновления с RC2 до RC5 (мы пропустили все промежуточные версии). С тех пор мы обновили до версии 1.0 и все еще видим проблему.

Я подозреваю, что какое-то взаимодействие с исправлением Солнца для this security issue (что изменило способ работы URL.toString() в webstart), но пока нет никаких доказательств. Кто-нибудь видел эту проблему раньше? Любая помощь очень ценится!

java.lang.NoClassDefFoundError: com/google/common/base/internal/Finalizer$ShutDown (wrong name: com/google/common/base/internal/Finalizer) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:620) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:56) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:195) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 
at java.lang.Class.getDeclaredMethods0(Native Method) 
at java.lang.Class.privateGetDeclaredMethods(Class.java:2395) 
at java.lang.Class.getMethod0(Class.java:2642) 
at java.lang.Class.getMethod(Class.java:1579) 
at com.google.common.base.FinalizableReferenceQueue.getStartFinalizer(FinalizableReferenceQueue.java:308) 
at com.google.common.base.FinalizableReferenceQueue.<clinit>(FinalizableReferenceQueue.java:102) 
at com.google.common.collect.MapMaker$QueueHolder.<clinit>(MapMaker.java:836) 
at com.google.common.collect.MapMaker$SoftValueReference.<init>(MapMaker.java:1078) 
at com.google.common.collect.MapMaker$Strength$2.referenceValue(MapMaker.java:379) 
at com.google.common.collect.MapMaker$StrategyImpl.setValue(MapMaker.java:488) 
at com.google.common.collect.MapMaker$StrategyImpl.setValue(MapMaker.java:462) 
at com.google.common.collect.CustomConcurrentHashMap$Impl$Segment.put(CustomConcurrentHashMap.java:960) 
at com.google.common.collect.CustomConcurrentHashMap$Impl.put(CustomConcurrentHashMap.java:1438)` 

Там не кажется, что ничего интересного в манифесте:

$ unzip -p google-collect.jar META-INF/MANIFEST.MF 
Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.0 
Created-By: 10.0-b19 (Sun Microsystems Inc.) 
+0

Я уверен, что это не имеет никакого отношения к связанному исправлению безопасности, потому что Sun не предоставляет реализации для Mac OS. Это то же самое * java vm/webstart * версия на Tiger and Leopard? –

ответ

1

В таком случае, как это, кажется, гораздо более уместно file a bug with the Guava project, а не просить помощи на SO, но я изо всех сил, чтобы объяснить, почему точно так думаю.

Я думаю, что эта трассировка стека кажется скорее более вероятной ошибкой или более глубокой проблемой на платформе, чем что-то, что вы делаете неправильно в том, как вы используете библиотеку.

+0

Выполнено: http://code.google.com/p/guava-libraries/issues/detail?id=312 –

0

Я предлагаю вам проверить manifest.mf файл вашей баночке. Предположительно, webstart использует URLClassLoader, поэтому здесь следует объяснение, чтобы найти другие банки.

Похоже, что веб-сайт не может найти библиотеку google, которую вы используете. Это может быть связано с исправлением, о котором вы говорили.

Edit: добавив правильную ссылку здесь ->http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#download

+0

Ваша ссылка не работает. –