2012-07-03 35 views
0

我们遇到了一个长时间运行的Java进程突然吐出java.lang.SecurityException的问题:密封违规:package .. is在JVM运行时覆盖密封的jar后,密封 。如何创建一个java.lang.SecurityException异常:密封违规:package ..被密封

我有点理解这个异常,但为了重现这个(以及后面的内容),我试图人为地创建一个密封的异常,它不工作。

有一个名为 'seal.jar' 与META-INF/MANIFEST.MF文件中像这样一个jar文件:

Manifest-Version: 1.0 
Sealed: true 

此包中包含A1,A2,A3这样的:

package sealed; 

public class A1 
{ 
    public A1() 
    { 
    System.err.println("Created version 1.0 of " + this.getClass()); 
    } 
} 

有第二罐子密封2.0.jar具有相同的三个类,但印刷“2.0版” 现在第三jar文件(run.jar)有这样的内容:

import sealed.A1; 
import sealed.A2; 
import sealed.A3; 

public class SealingTest 
{ 
    public static void main(String[] args) { 

    int cnt=0; 

    try { 

     while(true) { 

     if(cnt%3==0) { 
      new A1(); 
     } 
     else if(cnt%3==1) { 
      new A2(); 
     } 
     else if(cnt%3==2) { 
      new A3(); 
     } 

     Thread.sleep(5000); 
     cnt++; 
     } 
    } 
    catch (Throwable t) { 
     t.printStackTrace(); 
    } 
    } 
} 

而且我认为这将代码,然后将创建当我做下面的密封例外:

C:\CodeStreet\FTP>java -cp run.jar;seal-1.0.jar SealingTest 
Created 1.0 of class sealed.A1  # now executing: copy seal-2.0.jar seal-1.0.jar 
Created 2.0 of class sealed.A2 
Created 2.0 of class sealed.A3 
Created 1.0 of class sealed.A1 

所以它看起来像A1从密封1.0.jar加载,但是A2从覆盖密封装-1.0.jar。

不应该因为第一个类(A1)从seal-1.0.jar加载而第二个类(A2)被覆盖的文件加载了密封违规?

+0

阅读关于jar包密封的简单教程,以及如何在简单的程序中获得'SecurityException'。 http://www.journaldev.com/1347/java-jar-sealing-packages – Pankaj

回答

0

请尝试以下方法:

  • 从密封1.0.jar删除A3.java,但将其保留在密封2.0.jar;
  • 都在类路径中封装了jar并运行测试程序。

这应该给你想要的“SecurityException:密封违规”。