2013-05-07 50 views
1

我正在嘗試使用下面的代碼掃描我的實體類JPA @Column註釋;線程「main」中的異常java.lang.ClassFormatError:缺少代碼屬性

for (Method m : User.class.getMethods()) 
{ 
    if (m.isAnnotationPresent(javax.persistence.Column.class)) 
    { 
     javax.persistence.Column column = m.getAnnotation(javax.persistence.Column.class); 
     System.out.println(column.name()); 
    } 
} 

但是我得到了異常。我可以確認我的javax-api jar是我的依賴項的一部分。有誰知道我做錯了什麼?

Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/persistence/CascadeType at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(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.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2442) at java.lang.Class.getDeclaredMethods(Class.java:1808) at sun.reflect.annotation.AnnotationType$1.run(AnnotationType.java:104) at sun.reflect.annotation.AnnotationType$1.run(AnnotationType.java:101) at java.security.AccessController.doPrivileged(Native Method) at sun.reflect.annotation.AnnotationType.(AnnotationType.java:100) at sun.reflect.annotation.AnnotationType.getInstance(AnnotationType.java:84) at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:221) at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:88) at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70) at java.lang.reflect.Method.declaredAnnotations(Method.java:699) at java.lang.reflect.Method.getAnnotation(Method.java:685) at java.lang.reflect.AccessibleObject.isAnnotationPresent(AccessibleObject.java:189)

回答

2

您的jar不包含任何方法體,但只包含API規範。這不適合用於與應用程序一起運行或部署。提取jar打開反編譯器中的類,你會知道爲什麼它沒有運行。我不確定你從哪裏得到javax-api jar,但你肯定需要這個jar的原始完整版本。

+0

+1:如果你使用Eclipselink [試試這個](http://mvnrepository.com/artifact/org.eclipse.persistence/javax.persistence) – Aquillo 2013-05-07 10:13:26

+2

Juned,更好的解釋是它是一個API規範而不是API。 – Aquillo 2013-05-07 10:14:20

+0

我訴諸於glassfish實施API的特定版本,並工作。感謝Juned和Aquillo。 – Bitmap 2013-05-07 10:50:49

相關問題