Describe the issue
Running mock server crashes on Android
What you are trying to do
When I run the following code ' 'new ClientAndServer(62221).when(...).forward(...)'' the code throws an exception and crashes the app
MockServer version
The version you are using
implementation 'org.mock-server:mockserver-netty:5.14.0'
To Reproduce
Steps to reproduce the issue:
-
How you are running MockServer (i.e maven plugin, docker, etc)
Run MockServer on Android 11,and then execute the code 'new ClientAndServer(62221).when(...).forward(...)'
-
Code you used to create expectations
'new ClientAndServer(62221).when(...).forward(...)'
'''
public void startProxyServer() {
try {
new ClientAndServer(62221)
.when(request().withPath("/*"))
.forward(callback().withCallbackClass(NetCallBack.class));
} catch (Exception e) {
e.printStackTrace();
}
}
class NetCallBack implements ExpectationForwardAndResponseCallback {
public HttpRequest handle(HttpRequest httpRequest) throws Exception {
return httpRequest;
}
public HttpResponse handle(HttpRequest httpRequest, HttpResponse httpResponse) throws Exception {
Log.e("JDEBUG", "handle response :" + httpResponse.getFirstHeader("Content-Type"));
return null;
}
}
'''
-
What error you saw
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.lang.management.MemoryType"
Expected behaviour
MockServer Log
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ckj.demok, PID: 25145
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/management/MemoryType;
at org.mockserver.configuration.ConfigurationProperties.heapAvailableInKB(ConfigurationProperties.java:345)
at org.mockserver.configuration.ConfigurationProperties.maxLogEntries(ConfigurationProperties.java:369)
at org.mockserver.configuration.Configuration.maxLogEntries(Configuration.java:286)
at org.mockserver.log.MockServerEventLog.(MockServerEventLog.java:97)
at org.mockserver.mock.HttpState.(HttpState.java:120)
at org.mockserver.lifecycle.LifeCycle.(LifeCycle.java:55)
at org.mockserver.netty.MockServer.(MockServer.java:77)
at org.mockserver.netty.MockServer.(MockServer.java:57)
at org.mockserver.integration.ClientAndServer.(ClientAndServer.java:58)
at org.mockserver.integration.ClientAndServer.(ClientAndServer.java:52)
at com.ckj.demok.MainActivity.startProxyServer(MainActivity.java:102)
at com.ckj.demok.MainActivity.onCreate(MainActivity.java:38)
at android.app.Activity.performCreate(Activity.java:8143)
at android.app.Activity.performCreate(Activity.java:8114)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3513)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3700)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:8060)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.lang.management.MemoryType" on path: DexPathList[[zip file "/data/app/~~-YU6wO3TipGFdzu3YAFDyg==/com.ckj.demok--Oc4Ld-eTCu2kT8uP7IeUw==/base.apk"],nativeLibraryDirectories=[/data/app/~~-YU6wO3TipGFdzu3YAFDyg==/com.ckj.demok--Oc4Ld-eTCu2kT8uP7IeUw==/lib/arm, /data/app/~~-YU6wO3TipGFdzu3YAFDyg==/com.ckj.demok--Oc4Ld-eTCu2kT8uP7IeUw==/base.apk!/lib/armeabi-v7a, /system/lib, /system/system_ext/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at org.mockserver.configuration.ConfigurationProperties.heapAvailableInKB(ConfigurationProperties.java:345)
at org.mockserver.configuration.ConfigurationProperties.maxLogEntries(ConfigurationProperties.java:369)
at org.mockserver.configuration.Configuration.maxLogEntries(Configuration.java:286)
at org.mockserver.log.MockServerEventLog.(MockServerEventLog.java:97)
at org.mockserver.mock.HttpState.(HttpState.java:120)
at org.mockserver.lifecycle.LifeCycle.(LifeCycle.java:55)
at org.mockserver.netty.MockServer.(MockServer.java:77)
at org.mockserver.netty.MockServer.(MockServer.java:57)
at org.mockserver.integration.ClientAndServer.(ClientAndServer.java:58)
at org.mockserver.integration.ClientAndServer.(ClientAndServer.java:52)
at com.ckj.demok.MainActivity.startProxyServer(MainActivity.java:102)
at com.ckj.demok.MainActivity.onCreate(MainActivity.java:38)
at android.app.Activity.performCreate(Activity.java:8143)
at android.app.Activity.performCreate(Activity.java:8114)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3513)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3700)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:8060)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)