EJB模块测试用例初始化错误
我正在尝试在 NetBeans 7.1 下对一个简单的 EJBModule 项目进行单元测试,但收到一个警告和一个初始化错误。我使用的是 GlassFish 版本 3.1.1。我希望有人熟悉此类问题,并能给我一些如何解决它的建议。
在项目一中,我们有一个像这样的远程接口:
@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)
有什么想法可能导致此情况吗?
非常感谢。
I'm trying to unit test a simple EJBModule project under NetBeans 7.1, but I am receiving one warning and an initialization error. I'm using GlassFish version 3.1.1. I'm hoping someone is familiar with this type of issue and can give me some suggestions on how to resolve it.
In project one we have a remote interface like this:
@Remote
public interface CredentialEJBRemote {
//Stuff
}
Then in a second project we are implementing the interface like this:
@Stateless
@LocalBean
public class CredentialEJB implements CredentialEJBRemote {
//@Override stuff
}
And finally in the unit test I am doing this:
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
When I run the unit test I receive the warning and the error.
The warning is:
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
Followed by this error on the test case:
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)
Any ideas what may be causing this?
Thanks so much.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个错误是由于类路径上有 Netbean 的 javaee-api-6.0.jar 引起的。这个 jar 不包含方法体,因此抛出了难以捉摸且看似罕见的“缺少代码”错误。通过重命名 GlassFish 模块文件夹中的 Ant.jar 解决了 Ant.jar 警告。它与 Netbean 的 Ant.jar 发生冲突,因为它们是 Ant 的两个不同版本。
This error turned out to be caused by having Netbean's javaee-api-6.0.jar on the classpath. This jar does not contain the method bodies, so the elusive and seemingly rare "Absent code" error was being thrown. The Ant.jar warning was resolved by renaming the Ant.jar in GlassFish's modules folder. It was conflicting Netbean's Ant.jar because they are two different versions of Ant.