Java, ASM org.objectweb.asm.util.CheckClassAdapter provoca la versión de Major.minor 0.0 no admitida

StackOverflow https://stackoverflow.com/questions/1826302

Pregunta

Recibo la siguiente excepción:

java.lang.UnsupportedClassVersionError: net/sourceforge/barbecue/BarcodeException : **Unsupported major.minor version 0.0**
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
    at pl.wroc.pwr.judy2.master.TestClassLoader.loadClass(TestClassLoader.java:51)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.getConstructor(Class.java:1657)
    at junit.framework.TestSuite.getTestConstructor(TestSuite.java:83)
    at junit.framework.TestSuite.<init>(TestSuite.java:131)
    at org.junit.internal.runners.JUnit38ClassRunner.<init>(JUnit38ClassRunner.java:67)
    at org.junit.internal.builders.JUnit3Builder.runnerForClass(JUnit3Builder.java:14)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:31)
    at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:24)
    at pl.wroc.pwr.judy2.util.JUnitTestRunner.runTest(JUnitTestRunner.java:26)

Al intentar instrumentar algún bytecode con el siguiente código fuente. (para ser precisos, obtengo esta excepción cuando intento ejecutar bytecode modificado)

 public byte[] instrument(byte[] bytecode)
        {

        ClassReader cr = new ClassReader(bytecode);
        ClassWriter cw = new ClassWriter(cr, 0);

        // create new class adapter
        AbstractInstrumentClassAdapter ca = new InstrumentClassAdapterTracer(cw, tracer);
        // System.out.println("----------------------------------- Daikon start");
        cr.accept(ca, 0);

        ClassReader cr2 = new ClassReader(cw.toByteArray());
        ClassWriter cw2 = new ClassWriter(cr2, 0);
        ClassAdapter checker = new CheckClassAdapter(cw);
        AbstractInstrumentClassAdapter ca2 = new InstrumentClassAdapterInstrumenter(checker);

        cr2.accept(checker, 0);
        return cw2.toByteArray();
    }

Pensé que podría ser mi implementación InstrumentClassAdapterInstrumenter, así que lo dejé fuera y estoy usando solo CheckClassAdapter en este momento. ¿Alguien puede ver qué estoy haciendo mal?

Saludos,

¿Fue útil?

Solución

LOL, finalmente, como he hecho alguna pregunta aquí, parece ser un simple error de escritura, debería ser

 ClassWriter cw2 = new ClassWriter(cr2, 0);
 ClassAdapter checker = new CheckClassAdapter(cw2);

no

 ClassWriter cw2 = new ClassWriter(cr2, 0);
 ClassAdapter checker = new CheckClassAdapter(cw);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top