sun.net.www.ParseUtil.decode () против java.net.URLDecoder.decode () - PullRequest
1 голос
/ 29 июля 2011

У меня есть какой-то устаревший код, который вызывает sun.net.www.ParseUtil.decode(). Я хотел бы избежать вызова функций, специфичных для поставщика, поэтому я хочу заменить вызов чем-то другим.

Могу ли я использовать java.net.URLDecoder.decode () в качестве замены для замены или есть что-то, на что я должен обратить внимание?

Вызов используется для преобразования URL файла в обычный путь внутри пользовательского загрузчика классов:

URL url = //...
if(url.getProtocol().equals("file"))) {
    String path = url.getFile().replace('/', File.separatorChar);
    path = ParseUtil.decode(path);
    if (path.endsWith(File.separator)){
       path += "-";
    }
    p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
 }

(Обратите внимание, что это почти тот же код, что и в java.net.UrlClassLoader.getPermissions())

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Трудно сказать, так как семантика ParseUtil плохо документирована.

Я думаю, что полностью отказался бы от кода и заменил бы его кодом, использующим URI и конструктором File(URI).

1 голос
/ 29 июля 2011
URL url = //...
if(url.getProtocol().equals("file"))) {
    String path = url.getFile().replace('/', File.separatorChar);
    path = ParseUtil.decode(path);
    if (path.endsWith(File.separator)){
       path += "-";
    }
    p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
 }

Я сомневаюсь, что этот код делает что-нибудь полезное вообще.Конечно, любой код, который выполняет операцию replace (), является подозрительным.Попробуйте новый файл (url.toURI ()). GetPath () или .getAbsolutePath ().

Следующий вопрос: что он думает по поводу создания разрешения?Это вас никуда не приведет.Менеджер безопасности сделает это сам, когда это необходимо, проверит полученное разрешение и при необходимости выдаст исключение SecurityException.Создание разрешения самостоятельно не дает вам этого разрешения.

...