Reputation: 11
When serializing an object containing a field of type Throwable I get
one.microstream.persistence.exceptions.PersistenceExceptionTypeNotPersistable: Type not persistable: "class java.lang.Throwable".
Using the Serializer or TypedSerializer like this:
class ObjectToSerialize {
Throwable throwable;
}
public class Main {
public static void main(String[] args) {
ObjectToSerialize objectToSerialize = new ObjectToSerialize();
final SerializerFoundation<?> foundation = SerializerFoundation.New()
.registerEntityTypes(ObjectToSerialize.class);
final Serializer<byte[]> serializer = TypedSerializer.Bytes(foundation);
byte[] data = serializer.serialize(objectToSerialize);
ObjectToSerialize restored = serializer.deserialize(data);
}
}
The result I get is this:
Exception in thread "main" one.microstream.persistence.exceptions.PersistenceExceptionTypeNotPersistable: Type not persistable: "class java.lang.Throwable".
at one.microstream.persistence.binary.internal.BinaryHandlerUnpersistable.guaranteeSubTypeInstanceViablity(BinaryHandlerUnpersistable.java:98)
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.lambda$recursiveEnsureTypeHandlers$0(PersistenceTypeHandlerManager.java:278)
at one.microstream.persistence.binary.internal.AbstractBinaryHandlerReflective.iterateMemberTypes(AbstractBinaryHandlerReflective.java:591)
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.recursiveEnsureTypeHandlers(PersistenceTypeHandlerManager.java:271)
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.registerTypeHandler(PersistenceTypeHandlerManager.java:639)
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.internalEnsureTypeHandler(PersistenceTypeHandlerManager.java:616)
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.ensureTypeHandler(PersistenceTypeHandlerManager.java:384)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at one.microstream.persistence.binary.util.SerializerFoundation$Default.createPersistenceManager(SerializerFoundation.java:211)
at one.microstream.persistence.binary.util.TypedSerializer$Default.initialize(TypedSerializer.java:372)
at one.microstream.persistence.binary.util.TypedSerializer$Default.<init>(TypedSerializer.java:262)
at one.microstream.persistence.binary.util.TypedSerializer.New(TypedSerializer.java:145)
at one.microstream.persistence.binary.util.TypedSerializer.Bytes(TypedSerializer.java:117)
at com.testing.Main.main(Main.java:19)
I have seen this but in my case I need to do serialization not storing, maybe I'm wrong?
How do I serialize an object containing Throwable? If you can please point me to documentation or an example explaining how to do this. Many Thanks!
Upvotes: 0
Views: 91
Reputation: 11
Serializing an object containing a field of type Throwable using Java serialization with Serializable interface is doable. MicroStream claims to "Serialize any object" but MicroStream doesn't yet support serialization of Throwable and derived types, this is an important information that should be noted. Answered Here: https://github.com/microstream-one/microstream/issues/613
Upvotes: 1