جافا، ASM org.objectweb.asm.util.CheckClassAdapter يسبب MAJOR.MINOR غير مدعوم النسخة 0.0
-
22-07-2019 - |
سؤال
وأنا على الحصول على الاستثناء التالي:
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)
عند محاولة أداة بعض بايت كود مع شفرة المصدر أدناه. (على وجه الدقة، وأحصل على هذا الاستثناء عندما أحاول أن تنفيذ بايت كود المعدلة)
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();
}
واعتقدت أنها يمكن أن تكون تنفيذ InstrumentClassAdapterInstrumenter بلدي، لذلك تركت بها وأستخدمه CheckClassAdapter فقط في الوقت الراهن. أي شخص يمكن أن يرى ماذا أفعل الخطأ؟
وابتهاج،
المحلول
وLOL، وأخيرا ولقد سألت بعض الأسئلة هنا، يبدو أن خطأ مطبعي بسيط، يجب أن يكون
ClassWriter cw2 = new ClassWriter(cr2, 0);
ClassAdapter checker = new CheckClassAdapter(cw2);
وليس
ClassWriter cw2 = new ClassWriter(cr2, 0);
ClassAdapter checker = new CheckClassAdapter(cw);
لا تنتمي إلى StackOverflow