2012-02-19 37 views
2

我試圖在NetBeans 7.1下單元測試一個簡單的EJBModule項目,但我收到一個警告和一個初始化錯誤。我正在使用GlassFish 3.1.1版。我希望有人熟悉這種類型的問題,並可以就如何解決問題給出一些建議。EJB模塊測試用例初始化錯誤

在項目中的一個,我們有這樣的遠程接口:

@Remote 
public interface CredentialEJBRemote { 

//Stuff  

} 

然後在第二個項目我們正在實施這樣的界面:

@Stateless 
@LocalBean 
public class CredentialEJB implements CredentialEJBRemote { 

//@Override stuff 

} 

終於在單元測試我這樣做:

private static EJBContainer ec = EJBContainer.createEJBContainer(); 
private static Context ctx = ec.getContext(); 
CredentialEJBRemote instance = (CredentialEJBRemote)ctx.lookup("java:global/classes/CredentialEJB"); 
//Do stuff with instance 

當我運行單元測試時,我收到警告和錯誤。

的警告是:

WARNING: multiple versions of ant detected in path for junit 
jar:file:/C:/Program%20Files/NetBeans%207.1/java/ant/lib/ant.jar!/org/apache/tools/ant/Project.class 
and jar:file:/C:/Program%20Files/glassfish3.1.1/glassfish/modules/ant.jar!/org/apache/tools/ant/Project.class 

跟該錯誤的測試案例:

Testcase: initializationError(trefliq.persistence.CredentialEJBTest): Caused an ERROR 
Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer 
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass( 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791) ClassLoader.java:791) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.Class.getDeclaredFields0(Native Method) 
    at java.lang.Class.privateGetDeclaredFields(Class.java:2308) 
    at java.lang.Class.getDeclaredFields(Class.java:1760) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 

任何想法可能會導致什麼呢?

非常感謝。

+0

更新我的問題以提供更多信息。 – CodeNameBrandon 2012-02-20 15:06:11

回答

2

這個錯誤原來是由於在類路徑中有Netbean的javaee-api-6.0.jar引起的。這個jar不包含方法體,因此拋出難以捉摸且看似罕見的「缺席代碼」錯誤。通過在GlassFish的模塊文件夾中重命名Ant.jar解決了Ant.jar警告。它與Netbean的Ant.jar相沖突,因爲它們是Ant的兩個不同版本。