java jre 7u45 ломает classloader.getResources ()?

У меня есть код для перебора результатов classLoader.getResources ("META-INF / MANIFEST.MF»), чтобы вернуть список банок на пути к классам. Это работало нормально с 1.6.0_18 до 1.7.0_40. Теперь 1.7.0_45 ломает это, показывая всплывающее окно с предупреждением безопасности о смешанном коде со знаком / без знака.

Небольшой автономный тестовый пример для демонстрации проблемы:

package testcase;
import java.io.*;
import java.net.*;
import java.util.Enumeration;
import java.util.logging.*;
public class TestCase {
    public static void main(String[] args) {
        getAllJarUrls();
    }

    public static void getAllJarUrls() {
        try {
            final Enumeration mfUrls = Thread.currentThread().getContextClassLoader().getResources("META-INF/MANIFEST.MF");
            while (mfUrls.hasMoreElements()) {
                URL jarUrl = mfUrls.nextElement();
                if (!jarUrl.getProtocol().equals("jar")) {
                    continue;
                }
                try {
                    System.out.println(jarUrl.toURI());
                } catch (URISyntaxException ex) {
                    Logger.getLogger("testcase").log(Level.SEVERE, null, ex);
                }
            }
        } catch (IOException e) {
            Logger.getLogger("testcase").log(Level.SEVERE, null, e);
        }
    }
}

Запустите это с помощью jnlp (jar, подписанный действительным сертификатом) как:



    
        test
        test
      
    
    
        
    
    

При запуске, консоль должна быть видна, и нажмите «5» для подробного вывода. затем нажмитеблок» в подсказке безопасности, чтобы увидеть исключение. Нажав на кнопку allow, код будет работать нормально,но это не приемлемый пользовательский опыт, тем более что наше приложение должно запускаться без участия пользователя.

Вывод под 1.7.0_45 выглядит следующим образом:

CacheEntry[http://localhost/test/testcase.jar]: updateAvailable=true,lastModified=Tue Oct 15 21:09:21 CDT 2013,length=6314
jar:file:/C:/jre32/1.7.0_45/lib/javaws.jar!/META-INF/MANIFEST.MF
jar:file:/C:/jre32/1.7.0_45/lib/deploy.jar!/META-INF/MANIFEST.MF
jar:file:/C:/jre32/1.7.0_45/lib/plugin.jar!/META-INF/MANIFEST.MF
jar:file:/C:/jre32/1.7.0_45/lib/deploy.jar!/META-INF/MANIFEST.MF
Trace level set to 5: all ... completed.Trace level set to 5: all ... completed.
security: resource name "META-INF/MANIFEST.MF" in http://localhost/test/testcase.jar : java.lang.SecurityException: trusted loader attempted to load sandboxed resource from http://localhost/test/testcase.jar

Testcase.jar подписан. В него даже включены все новые атрибуты манифеста: Application-Name: testcase Permissions: all-permissions Codebase: *

Разница в декомпилированном CPCallBackHandler из deploy.jar с 7u40 по 7u45 показывает значительные изменения. Похоже, что изменения для LiveConnect нарушили существующую функциональность. И нет, тамЗдесь нет LiveConnect.

Кто-нибудь еще сталкивался с этим? Предложения для обхода? Отправить ошибку?

(примечание: также размещены на форумах Java OTN, но яЯ надеюсь на более быстрый ответ здесь :).

Спасибо Крис

Ответы на вопрос(4)

Ваш ответ на вопрос