Monday 9 November 2020

Using Protostuff on Android causes RuntimeException because of missing sun.reflect.ReflectionFactory

I'm trying to use Protostuff version 1.7.2 in Android to serialize and deserialize some user-defined classes. I'm generating the Protostuff's schema's during runtime with the RuntimeSchema.getSchema() method. However, I'm running into a RuntimeException when I call this method.

I've pinned down the issue to sun.reflect.ReflectionFactory not existing in Android. Protostuff tries to load this class here, but appearently can't do so on Android, causing the return value here to be null, which triggers the RuntimeException. I tried to run the same code (see below) on Ubuntu/Windows, there my code runs fine because the installed Java runtime includes sun.reflect.ReflectionFactory.

final DefaultIdStrategy STRATEGY = new DefaultIdStrategy(IdStrategy.DEFAULT_FLAGS
                | IdStrategy.ALLOW_NULL_ARRAY_ELEMENT
                | IdStrategy.MORPH_COLLECTION_INTERFACES
                | IdStrategy.MORPH_MAP_INTERFACES
                | IdStrategy.MORPH_NON_FINAL_POJOS);
schema = RuntimeSchema.getSchema(clazz, STRATEGY);

I tried to use protostuff-runtime-md, which should work on Android, but no luck.

Can anyone tell me how to get this to work on Android?



from Using Protostuff on Android causes RuntimeException because of missing sun.reflect.ReflectionFactory

No comments:

Post a Comment