diff --git a/pom.xml b/pom.xml
index 43a9d4037..40e7fd315 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
4.0.0
chronicle-map
- 3.0.0alpha-SNAPSHOT
+ 3.0.0-alpha-SNAPSHOT
OpenHFT/Chronicle-Map
Chronicle-Map
bundle
diff --git a/src/main/java/net/openhft/chronicle/map/SerializationBuilder.java b/src/main/java/net/openhft/chronicle/map/SerializationBuilder.java
index 04f5a8c64..ca22cc032 100644
--- a/src/main/java/net/openhft/chronicle/map/SerializationBuilder.java
+++ b/src/main/java/net/openhft/chronicle/map/SerializationBuilder.java
@@ -34,9 +34,7 @@ import net.openhft.lang.threadlocal.ThreadLocalCopies;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.Serializable;
+import java.io.*;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -50,6 +48,7 @@ import static net.openhft.chronicle.hash.serialization.internal.SizeMarshallers.
import static net.openhft.chronicle.map.Objects.hash;
final class SerializationBuilder implements Cloneable, Serializable {
+ private static final long serialVersionUID = 0L;
private static final Bytes EMPTY_BYTES = new ByteBufferBytes(ByteBuffer.allocate(0));
@@ -88,6 +87,8 @@ final class SerializationBuilder implements Cloneable, Serializable {
private long maxSize;
final boolean sizeIsStaticallyKnown;
+
+ boolean serializesGeneratedClasses = false;
@SuppressWarnings("unchecked")
SerializationBuilder(Class eClass, Role role) {
@@ -112,10 +113,12 @@ final class SerializationBuilder implements Cloneable, Serializable {
metaInterop((MetaBytesInterop) DataValueMetaBytesInterop.forIdentity(role));
metaInteropProvider(DataValueMetaBytesInterop.interopProvider(eClass));
sizeMarshaller(constant((long) size));
+ serializesGeneratedClasses = true;
return;
} catch (Exception e) {
try {
eClass = DataValueClasses.directClassFor(eClass);
+ serializesGeneratedClasses = true;
} catch (Exception ex) {
// ignore, fall through
}
@@ -169,6 +172,25 @@ final class SerializationBuilder implements Cloneable, Serializable {
}
}
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ out.writeBoolean(serializesGeneratedClasses);
+ if (serializesGeneratedClasses) {
+ out.writeObject(eClass);
+ out.writeObject(role);
+ }
+ out.defaultWriteObject();
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ boolean generatedClassesSerialized = in.readBoolean();
+ if (generatedClassesSerialized) {
+ Class eClass = (Class) in.readObject();
+ Role role = (Role) in.readObject();
+ new SerializationBuilder(eClass, role);
+ }
+ in.defaultReadObject();
+ }
+
boolean possibleOffHeapReferences() {
if (reader instanceof CharSequenceReader)
return false;