Closed GoogleCodeExporter closed 8 years ago
This produces errors in PowerMock when doing byte-code manipulation. Probably a
bug
in 3.11. I've upgraded to 3.10 in the meantime.
Original comment by johan.ha...@gmail.com
on 8 Jul 2009 at 10:05
The error happens in PrepareForTestAnnotationTest and looks like:
java.lang.ClassFormatError: Invalid length 636 in LocalVariableTable in class
file
org/apache/mina/core/session/AbstractIoSession
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
at
org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.jav
a:206)
at
org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader
.java:150)
at
org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupport
ingClassLoader.java:57)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
at
org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.jav
a:206)
at
org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader
.java:150)
at
org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupport
ingClassLoader.java:57)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
at
org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.jav
a:206)
at
org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader
.java:150)
at
org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupport
ingClassLoader.java:57)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at
sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionF
actory.java:95)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)
at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:370)
at sun.reflect.annotation.AnnotationParser.parseClassValue(AnnotationParser.java:351)
at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:653)
at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:460)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286)
at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
at java.lang.Class.initAnnotationsIfNecessary(Class.java:3072)
at java.lang.Class.getAnnotations(Class.java:3052)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.cl
assAnnotations(PowerMockJUnit44RunnerDelegateImpl.java:177)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.ge
tDescription(PowerMockJUnit44RunnerDelegateImpl.java:169)
at
org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.get
Description(JUnit4TestSuiteChunkerImpl.java:173)
at
org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.
getDescription(AbstractCommonPowerMockRunner.java:39)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.sendTree(JUnit4T
estClassReference.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.sendTrees(RemoteTestRunne
r.java:476)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner
.java:464)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner
.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.jav
a:197)
Original comment by johan.ha...@gmail.com
on 8 Jul 2009 at 10:14
Original comment by johan.ha...@gmail.com
on 7 Sep 2009 at 7:23
Any updates on this?
Original comment by dmitry.k...@gmail.com
on 16 Nov 2009 at 8:32
Unfortunately not. Guess we have to wait for the next version. You can of course
override the dependency and use 3.11 yourself if you like since most things
work.
Original comment by johan.ha...@gmail.com
on 16 Nov 2009 at 9:28
btw, have you reported this problem to the javassist JIRA?
Original comment by andrei.i...@gmail.com
on 26 Nov 2009 at 11:09
No I haven't but we probably should. The thing is that's it's difficult to give
a
good description of what's causing the problem.
Original comment by johan.ha...@gmail.com
on 26 Nov 2009 at 12:36
I hope you can manage to get that description after all... as I've reported,
I've
managed to run into a case where the jvm crashes with 3.10
Original comment by andrei.i...@gmail.com
on 5 Jan 2010 at 3:38
I've seem to have run into the same situation. One of my classes, that were
instrumented with @PrepareForTest, called the length() method on a
StringBuilder,
which caused the bug with javassist 3.10.0
(https://jira.jboss.org/jira/browse/JASSIST-76). So, I switched javassist
3.10.0 with
3.11.0.GA, but that caused the "java.lang.ClassFormatError: Invalid length 636
in
LocalVariableTable in class file" as described above, so I had to go back to
3.10.0.
I managed to get around the issue by casting the StringBuilder to a CharSequence
first (INVOKEVIRTUAL vs INVOKEINTERFACE?). This means that I had to change my
code to
make tests work :<
Original comment by eeckhout...@gmail.com
on 18 Mar 2010 at 4:28
Sorry to hear that but thanks for reporting about your findings. It's been a
while
since javassist released anything..
Original comment by johan.ha...@gmail.com
on 21 Mar 2010 at 8:18
I had the same problem with both JA 3.10.0 and 3.11.0. Now I upgraded to
3.12.0.GA
which was released on april 16, this solved the problem for me.
Original comment by daniel.b...@gmail.com
on 22 Apr 2010 at 12:10
That's great news. Didn't know that it was released! I'll and an issue for
updating to
that version. Thanks for letting us know.
Original comment by johan.ha...@gmail.com
on 22 Apr 2010 at 12:37
[deleted comment]
It exists in 3.12.0.GA as well :(
Original comment by ankurmit...@gmail.com
on 2 Jul 2010 at 5:42
Does it happen with Javassist 3.14 as well?
Original comment by johan.ha...@gmail.com
on 23 Nov 2010 at 9:44
I am getting the same error (java.lang.ClassFormatError: Invalid method Code
length 70878 in class file) with the currently available download for
powermockito (1,4,7) which uses javasisit 1.14.0-GA.
Original comment by gavin.tr...@gmail.com
on 24 Feb 2011 at 3:26
Additional:
I am using org.powermock.modules.junit4.PowerMockRunner
and attempting a whenNew:
whenNew(ccPop.class).withArguments(anyInt()).thenThrow(new
RuntimeException("BooHoo"));
ccPop.class is a class created with the main method of the class X defined in
the @PrepareForTest annotation.
Thanks
Gavin
Original comment by gavin.tr...@gmail.com
on 24 Feb 2011 at 3:30
We're using 3.14 now
Original comment by johan.ha...@gmail.com
on 19 May 2011 at 7:12
Original issue reported on code.google.com by
johan.ha...@gmail.com
on 8 Jul 2009 at 8:42