0

I'm instrumenting a code with asm library and receive such error. What does it mean? Does anybody know how it can be fixed? Please, note that i'm skipping interfaces in Agent agentmain method:

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

Error stack:

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)
Iana Mykhailenko
  • 553
  • 5
  • 15

1 Answers1

0

This issue was resolved. I skipped an instrumenting for interfaces and abstract classes in Agent agentmain function. However it doesn't work for libraries that loaded during runtime. So this check (if class is interface) should be done inside Agent transform method. I moved that check there and now it works.

Thanks

Iana Mykhailenko
  • 553
  • 5
  • 15