Closed overwerk closed 2 years ago
Please see the docs about object instantiation.
You can use kryo.setInstantiatorStrategy(new DefaultInstantiatorStrategy(new StdInstantiatorStrategy()));
to instantiate objects without default constructors.
Hi,
when I use kryo.setInstantiatorStrategy(new DefaultInstantiatorStrategy(new StdInstantiatorStrategy()));
I get null pointer exception. Probably because it happens excatly whats stated in the docs Creating the object by bypassing its constructors may leave the object in an uninitialized or invalid state.
exception:
15:23 WARN: Class is not registered: java.util.Collections$UnmodifiableRandomAccessList
Note: To register this class use: kryo.register(java.util.Collections.UnmodifiableRandomAccessList.class);
com.esotericsoftware.kryo.KryoException: java.lang.NullPointerException
Serialization trace:
parameters (net.fortuna.ical4j.model.ParameterList)
parameters (net.fortuna.ical4j.model.property.CalScale$ImmutableCalScale)
properties (net.fortuna.ical4j.model.Calendar)
calendar (core.Calendar)
calendar (core.EstateManager)
at com.esotericsoftware.kryo.serializers.ReflectField.write(ReflectField.java:101)
at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.write(CompatibleFieldSerializer.java:107)
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:642)
at com.esotericsoftware.kryo.serializers.ReflectField.write(ReflectField.java:85)
at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.write(CompatibleFieldSerializer.java:107)
at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:711)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:159)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:44)
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:642)
at com.esotericsoftware.kryo.serializers.ReflectField.write(ReflectField.java:85)
at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.write(CompatibleFieldSerializer.java:107)
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:642)
at com.esotericsoftware.kryo.serializers.ReflectField.write(ReflectField.java:85)
at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.write(CompatibleFieldSerializer.java:107)
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:642)
at com.esotericsoftware.kryo.serializers.ReflectField.write(ReflectField.java:85)
at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.write(CompatibleFieldSerializer.java:107)
at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:711)
at core.XmlFacade.toFile(XmlFacade.java:226)
at core.TaskSaveData.run(TaskSaveData.java:49)
at it.sauronsoftware.cron4j.RunnableTask.execute(Unknown Source)
at it.sauronsoftware.cron4j.TaskExecutor$Runner.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
at java.util.Collections$UnmodifiableCollection.size(Collections.java:1032)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:91)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:44)
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:642)
at com.esotericsoftware.kryo.serializers.ReflectField.write(ReflectField.java:85)
... 22 more
Would be great if there is another, safe solution to the problem.
Kryo supports most JDK data structures out of the box. UnmodifiableCollection
is an exception, because it is not possible to write a safe serializer for these wrapper classes without using reflection.
You can add the UnmodifiableCollectionSerializer
from the kryo-serializers project.
Aaah, thanks a lot, it works!
Hi,
the deserialization of an net.fortuna.ical4j.model.Calendar (iCal4j lib) objects fails and I don't know how to handle this. Any help is appreciated :-)
My kryo settings:
The exception:
Relevant part in my Calendar class: