2012-01-09 2 views
1

У меня есть метод, который возвращает jar, в котором загружен определенный класс. Метод приведен ниже. Для некоторых классов приведенная ниже строка возвращает нульЧто это значит, если class.getProtectionDomain возвращает null

ProtectionDomain protectionDomain = c.getProtectionDomain();

Я хочу понять, в какой ситуации это null. Код компилируется, поэтому я считаю, что класс виден во время компиляции, и зависимость проекта, в котором находится конкретный класс, также зависит от времени компиляции.

Вот метод

public static String jarFor(Class c) { 
    ProtectionDomain protectionDomain = c.getProtectionDomain(); 
    CodeSource codeSource = protectionDomain.getCodeSource(); 
    URL url = codeSource.getLocation(); 
    String path = url.getPath(); 
    if (Os.isWindows() && path.startsWith("/")) { 
     path = path.substring(1); 
    } 
    return URLDecoder.decode(path); 
    } 

ответ

1

Ни javadoc или сам код Java указывает, что getProtectionDomain может возвращать нуль.

public java.security.ProtectionDomain getProtectionDomain() { 
    SecurityManager sm = System.getSecurityManager(); 
    if (sm != null) { 
     sm.checkPermission(SecurityConstants.GET_PD_PERMISSION); 
    } 
    java.security.ProtectionDomain pd = getProtectionDomain0(); 
    if (pd == null) { 
     if (allPermDomain == null) { 
      java.security.Permissions perms = 
       new java.security.Permissions(); 
      perms.add(SecurityConstants.ALL_PERMISSION); 
      allPermDomain = 
       new java.security.ProtectionDomain(null, perms); 
     } 
     pd = allPermDomain; 
    } 
    return pd; 
} 
Смежные вопросы