2012-01-09 54 views
1

我有一個方法返回從中加載特定類的jar。方法如下。 對於某些類,下面的行返回null這是什麼意思如果class.getProtectionDomain返回null

ProtectionDomain protectionDomain = c.getProtectionDomain();

我想了解它在什麼情況下爲空。代碼編譯,所以我認爲這個類在編譯時是可見的,並且特定類所在的項目的依賴性也是編譯時間依賴性。

這裏是方法

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可以返回null。

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; 
}