2015-01-13 4 views
0

Я использую код с библиотекой asm и получаю такую ​​ошибку. Что это значит? Кто-нибудь знает, как это можно исправить? Пожалуйста, обратите внимание, что я буду пропускать интерфейсы агента agentmain метода: стекjava.lang.ClassFormatError: атрибут кода в собственных или абстрактных методах в файле класса

if (clazz.isPrimitive() || clazz.isInterface() || clazz.isLocalClass() || clazz.isArray() || clazz.isAnonymousClass() || clazz.isMemberClass() || clazz.isPrimitive()) { 
    continue; 
} 

Ошибка:

java.lang.ClassFormatError: Code attribute in native or abstract methods in class file com/mysql/jdbc/ConnectionProperties 
    java.lang.ClassLoader.defineClass1(Native Method) 
    java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    java.security.AccessController.doPrivileged(Native Method) 
    java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    java.lang.ClassLoader.defineClass1(Native Method) 
    java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    java.security.AccessController.doPrivileged(Native Method) 
    java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    java.lang.ClassLoader.defineClass1(Native Method) 
    java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    java.security.AccessController.doPrivileged(Native Method) 
    java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) 
    java.sql.DriverManager.getConnection(DriverManager.java:571) 
    java.sql.DriverManager.getConnection(DriverManager.java:215) 
    org.apache.jsp.welcome_jsp._jspService(welcome_jsp.java:92) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 

ответ

0

Эта проблема была решена. Я пропустил инструмент для интерфейсов и абстрактных классов в функции Agent agentmain. Однако он не работает для библиотек, загружаемых во время выполнения. Таким образом, эта проверка (если класс является интерфейсом) должна выполняться внутри метода преобразования агента. Я перевел этот чек, и теперь он работает.

С благодарностью