msgpack-java
msgpack-java copied to clipboard
msgpack on Android with jackson result of Failed resolution of: Lorg/msgpack/value/holder/ValueHolder
Hi, I tried to use Msgpack on android but I can't make it work.
I tried to unpack a Map<String, Object> into my app using the following piece of code :
ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory());
Map<String, Object> json = objectMapper.readValue(in, Map.class);
But it fail with the error :
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/msgpack/value/holder/ValueHolder;
My Map look like :
{
"id": "/root",
"human_readable_id": null,
"value": null,
"displayValue": null,
"items": [{
"id": "/root/items/0",
"human_readable_id": "8",
"value": "a",
"items": null
},{
"id": "/root/items/1",
"human_readable_id": "9",
"value": "b",
"items": null
},{
"id": "/root/items/2",
"human_readable_id": "6",
"value": "c",
"items": null
}]
}
PS: all parameter with value as null is not send. I've post it to help you to understand my structure.
My gradle depencvies :
implementation 'javassist:javassist:3.12.1.GA'
implementation 'org.msgpack:msgpack-core:0.8.20'
implementation 'org.komamitsu:jackson-dataformat-msgpack:0.0.3'
Full error :
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: fr.hypa.keyboard, PID: 23801
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/msgpack/value/holder/ValueHolder;
at org.msgpack.jackson.dataformat.msgpack.MessagePackParser.<init>(MessagePackParser.java:26)
at org.msgpack.jackson.dataformat.msgpack.MessagePackParser.<init>(MessagePackParser.java:57)
at org.msgpack.jackson.dataformat.msgpack.MessagePackFactory._createParser(MessagePackFactory.java:38)
at org.msgpack.jackson.dataformat.msgpack.MessagePackFactory.createParser(MessagePackFactory.java:33)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2137)
at fr.hypa.keyboard.DAO.loadAlphabet(DAO.java:77)
at fr.hypa.keyboard.HypaView.onKeyboardOpen(HypaView.java:138)
at fr.hypa.keyboard.HypaView.onDraw(HypaView.java:181)
at android.view.View.draw(View.java:21975)
at android.gesture.GestureOverlayView.draw(GestureOverlayView.java:401)
at android.view.View.updateDisplayListIfDirty(View.java:20852)
at android.view.View.draw(View.java:21707)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20843)
at android.view.View.draw(View.java:21707)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20843)
at android.view.View.draw(View.java:21707)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20843)
at android.view.View.draw(View.java:21707)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20843)
at android.view.View.draw(View.java:21707)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.draw(View.java:21978)
at com.android.internal.policy.DecorView.draw(DecorView.java:808)
at android.view.View.updateDisplayListIfDirty(View.java:20852)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:581)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:587)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:664)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:3767)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3495)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2779)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1745)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7768)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:967)
at android.view.Choreographer.doCallbacks(Choreographer.java:791)
at android.view.Choreographer.doFrame(Choreographer.java:726)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.msgpack.value.holder.ValueHolder" on path: DexPathList[[zip file "/data/app/fr.hypa.keyboard-cXDp3Z8UZvJ6zh7I5mSYlA==/base.apk"],nativeLibraryDirectories=[/data/app/fr.hypa.keyboard-cXDp3Z8UZvJ6zh7I5mSYlA==/lib/arm64, /system/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 52 more
I/Process: Sending signal. PID: 23801 SIG: 9
Disconnected from the target VM, address: 'localhost:8642', transport: 'socket'
Sorry for my late response.
org.komamitsu:jackson-dataformat-msgpack has been merged into this project as org.msgpack:jackson-dataformat-msgpack. How about trying this?
implementation 'org.msgpack:jackson-dataformat-msgpack:0.8.21'