2012-01-09 3 views
1

特定のクラスがロードされているjarを返すメソッドがあります。この方法は以下の通りです。 一部のクラスでは、次の行はnullを返します。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は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; 
} 
関連する問題