Java, ASM org.objectweb.asm.util.CheckClassAdapter causa Major.minor versione 0.0 non supportata
-
22-07-2019 - |
Domanda
Ricevo la seguente eccezione:
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)
Quando si tenta di strumentare alcuni bytecode con il codice sorgente sottostante. (per essere precisi, ottengo questa eccezione quando sto cercando di eseguire il bytecode modificato)
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();
}
Ho pensato che potesse essere la mia implementazione InstrumentClassAdapterInstrumenter, quindi l'ho lasciato fuori e al momento sto usando solo CheckClassAdapter. Qualcuno può vedere cosa sto facendo di sbagliato?
Saluti,
Soluzione
LOL, finalmente come ho fatto qualche domanda qui, sembra essere un semplice errore di battitura, dovrebbe essere
ClassWriter cw2 = new ClassWriter(cr2, 0);
ClassAdapter checker = new CheckClassAdapter(cw2);
non
ClassWriter cw2 = new ClassWriter(cr2, 0);
ClassAdapter checker = new CheckClassAdapter(cw);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow