You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalAccessException: no such field: test.Test$$$EasyMock$1.$callback/org.easymock.internal.ClassMockingData/putField
at org.easymock.internal.ClassProxyFactory.getCallbackSetter(ClassProxyFactory.java:282)
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:213)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:110)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:83)
at test.Test.main(Test.java:12)
Caused by: java.lang.IllegalAccessException: no such field: test.Test$$$EasyMock$1.$callback/org.easymock.internal.ClassMockingData/putField
at java.base/java.lang.invoke.MemberName.makeAccessException(MemberName.java:911)
at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:994)
at java.base/java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:3742)
at java.base/java.lang.invoke.MethodHandles$Lookup.findSetter(MethodHandles.java:3144)
at org.easymock.internal.ClassProxyFactory.getCallbackSetter(ClassProxyFactory.java:280)
... 4 more
Caused by: java.lang.LinkageError: bad field type alias: class org.easymock.internal.ClassMockingData not visible from class test.Test$$$EasyMock$1
at java.base/java.lang.invoke.MemberName.checkForTypeAlias(MemberName.java:825)
at java.base/java.lang.invoke.MemberName$Factory.resolve(MemberName.java:966)
at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:991)
... 7 more
Seen both with JDK 21 and JDK 17.
I don't see the error if I use easymock-5.0.1.jar, unfortunately with 5.0.1 and JDK 21 I run into another issue:
package test;
public class Test {
public static void main(String[] args) {
Object a = org.easymock.EasyMock.createStrictControl().createMock(Test.class);
System.out.println(a);
}
}
$ /usr/lib/jvm/java-21/bin/java -cp easymock-5.0.1.jar:objenesis-3.3.jar test/Test.java
Exception in thread "main" java.lang.IllegalArgumentException: test.Test$$$EasyMock$1 must be defined in the same package as org.easymock.internal.ClassProxyFactory
at org.easymock.bytebuddy.dynamic.loading.ClassInjector$UsingLookup.injectRaw(ClassInjector.java:1635)
at org.easymock.bytebuddy.dynamic.loading.ClassInjector$AbstractBase.inject(ClassInjector.java:118)
at org.easymock.bytebuddy.dynamic.loading.ClassLoadingStrategy$UsingLookup.load(ClassLoadingStrategy.java:519)
at org.easymock.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:101)
at org.easymock.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:6317)
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:121)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:108)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:81)
at test.Test.main(Test.java:4)
Our use case is, using easymock5.2.0 in Eclipse tests running on Java 17+. Due to OSGI classloading, each bundle can load classes from bundles listed in its MANIFEST.MF. We have a production bundle and want to mock a class in it. The production bundle doesn't depend on easymock and so cannot load easymock classes. The mocking then fails as seen above.
With easymock5.1.0 we see both problems (mocking on Java 21 and mocking if classloader doesn't see easymock).
The text was updated successfully, but these errors were encountered:
To reproduce:
This snippet goes in a folder
test
, next to this folder I haveeasymock-5.2.0.jar
andobjenesis-3.3.jar
.From the root folder containing the folder
test
and the libraries, compile with:Run with:
Observe error:
Seen both with JDK 21 and JDK 17.
I don't see the error if I use
easymock-5.0.1.jar
, unfortunately with5.0.1
and JDK 21 I run into another issue:Our use case is, using
easymock
5.2.0
in Eclipse tests running on Java 17+. Due to OSGI classloading, each bundle can load classes from bundles listed in itsMANIFEST.MF
. We have a production bundle and want to mock a class in it. The production bundle doesn't depend oneasymock
and so cannot loadeasymock
classes. The mocking then fails as seen above.With
easymock
5.1.0
we see both problems (mocking on Java 21 and mocking if classloader doesn't seeeasymock
).The text was updated successfully, but these errors were encountered: