diff --git a/communication/binary/src/main/java/org/eclipse/serializer/communication/binarydynamic/ComPersistenceAdaptorBinaryDynamic.java b/communication/binary/src/main/java/org/eclipse/serializer/communication/binarydynamic/ComPersistenceAdaptorBinaryDynamic.java
index bbc89f78..a49b127b 100644
--- a/communication/binary/src/main/java/org/eclipse/serializer/communication/binarydynamic/ComPersistenceAdaptorBinaryDynamic.java
+++ b/communication/binary/src/main/java/org/eclipse/serializer/communication/binarydynamic/ComPersistenceAdaptorBinaryDynamic.java
@@ -205,7 +205,7 @@ private BinaryPersistenceFoundation> hostConnectionFoundation()
hostFoundation.setTypeMismatchValidator(Persistence.typeMismatchValidatorFailing());
final PersistenceTypeDictionaryManager typeDictionaryManager = PersistenceTypeDictionaryManager.Transient(
- hostFoundation.getTypeDictionaryCreator());
+ hostFoundation.getTypeDictionaryProvider());
final PersistenceTypeDictionaryView typeDictionaryView = this.provideTypeDictionary();
typeDictionaryView.allTypeDefinitions().forEach(d -> typeDictionaryManager.registerTypeDefinition(d.value()));
@@ -252,7 +252,7 @@ public BinaryPersistenceFoundation> provideClientPersistenceFoundation(
clientFoundation.setTypeIdProvider (protocol.idStrategy().createTypeIdProvider());
final PersistenceTypeDictionaryManager typeDictionaryManager = PersistenceTypeDictionaryManager.Transient(
- clientFoundation.getTypeDictionaryCreator());
+ clientFoundation.getTypeDictionaryProvider());
final PersistenceTypeDictionaryView typeDictionaryView = protocol.typeDictionary();
typeDictionaryView.allTypeDefinitions().forEach(d -> typeDictionaryManager.registerTypeDefinition(d.value()));
@@ -376,7 +376,7 @@ public PersistenceTypeDictionary provideTypeDictionaryInternal()
initFoundation.setTypeDictionaryManager(
PersistenceTypeDictionaryManager.Transient(
- initFoundation.getTypeDictionaryCreator()
+ initFoundation.getTypeDictionaryProvider()
)
);
diff --git a/communication/communication/src/main/java/org/eclipse/serializer/communication/types/ComPersistenceAdaptor.java b/communication/communication/src/main/java/org/eclipse/serializer/communication/types/ComPersistenceAdaptor.java
index 9cb98317..d031239b 100644
--- a/communication/communication/src/main/java/org/eclipse/serializer/communication/types/ComPersistenceAdaptor.java
+++ b/communication/communication/src/main/java/org/eclipse/serializer/communication/types/ComPersistenceAdaptor.java
@@ -43,7 +43,7 @@ public default PersistenceTypeDictionaryView provideTypeDictionary()
initFoundation.setTypeDictionaryManager(
PersistenceTypeDictionaryManager.Transient(
- initFoundation.getTypeDictionaryCreator()
+ initFoundation.getTypeDictionaryProvider()
)
);
diff --git a/persistence/persistence/src/main/java/org/eclipse/serializer/persistence/types/PersistenceTypeDictionaryManager.java b/persistence/persistence/src/main/java/org/eclipse/serializer/persistence/types/PersistenceTypeDictionaryManager.java
index ef61ff8a..ac46e4c4 100644
--- a/persistence/persistence/src/main/java/org/eclipse/serializer/persistence/types/PersistenceTypeDictionaryManager.java
+++ b/persistence/persistence/src/main/java/org/eclipse/serializer/persistence/types/PersistenceTypeDictionaryManager.java
@@ -16,8 +16,8 @@
import static org.eclipse.serializer.util.X.notNull;
-import org.eclipse.serializer.util.X;
import org.eclipse.serializer.persistence.exceptions.PersistenceException;
+import org.eclipse.serializer.util.X;
public interface PersistenceTypeDictionaryManager extends PersistenceTypeDictionaryProvider
{
@@ -326,11 +326,11 @@ public final synchronized boolean registerRuntimeTypeDefinitions(
public static PersistenceTypeDictionaryManager Transient(
- final PersistenceTypeDictionaryCreator typeDictionaryCreator
+ final PersistenceTypeDictionaryProvider typeDictionaryProvider
)
{
return new PersistenceTypeDictionaryManager.Transient(
- notNull(typeDictionaryCreator)
+ notNull(typeDictionaryProvider)
);
}
@@ -340,7 +340,7 @@ public final class Transient extends PersistenceTypeDictionaryManager.Abstract
type) throws Pe
@Override
public final synchronized PersistenceTypeHandlerManager initialize()
{
- logger.info("Initializing type handler manager");
-
if(this.initialized)
{
-// XDebug.debugln("already initialized");
+ logger.debug("type handler manager already initialized");
return this;
}
+ logger.info("Initializing type handler manager");
+
synchronized(this.typeHandlerRegistry)
{
this.synchInternalInitialize();
diff --git a/serializer/src/main/java/org/eclipse/serializer/Serializer.java b/serializer/src/main/java/org/eclipse/serializer/Serializer.java
index 0c5769ac..3882b855 100644
--- a/serializer/src/main/java/org/eclipse/serializer/Serializer.java
+++ b/serializer/src/main/java/org/eclipse/serializer/Serializer.java
@@ -75,6 +75,13 @@ public interface Serializer extends AutoCloseable
* @return the deserialized object graph
*/
public T deserialize(M medium);
+
+ /**
+ * Export the current type dictionary as String.
+ *
+ * @return type dictionary as String.
+ */
+ public String exportTypeDictionay();
public static Serializer Bytes()
{
@@ -231,6 +238,13 @@ public synchronized void close()
}
}
+ @Override
+ public String exportTypeDictionay()
+ {
+ return this.foundation.getTypeDictionaryAssembler()
+ .assemble(this.persistenceManager.typeDictionary());
+ }
+
private void lazyInit()
{
if(this.persistenceManager == null)
diff --git a/serializer/src/main/java/org/eclipse/serializer/SerializerFoundation.java b/serializer/src/main/java/org/eclipse/serializer/SerializerFoundation.java
index 8b56c76b..d18f401b 100644
--- a/serializer/src/main/java/org/eclipse/serializer/SerializerFoundation.java
+++ b/serializer/src/main/java/org/eclipse/serializer/SerializerFoundation.java
@@ -27,6 +27,7 @@
import org.eclipse.serializer.persistence.types.PersistenceRootsProvider;
import org.eclipse.serializer.persistence.types.PersistenceStorer;
import org.eclipse.serializer.persistence.types.PersistenceStorer.CreationObserver;
+import org.eclipse.serializer.persistence.types.PersistenceTypeDictionaryLoader;
import org.eclipse.serializer.persistence.types.PersistenceTypeDictionaryManager;
import org.eclipse.serializer.persistence.types.PersistenceTypeHandlerManager;
import org.eclipse.serializer.persistence.types.PersistenceTypeIdProvider;
@@ -50,6 +51,8 @@ public interface SerializerFoundation> extends
public F setSerializerTypeInfoStrategyCreator(SerializerTypeInfoStrategyCreator serializerTypeInfoStrategyCreator);
+ public F setInitialTypeDictionary(String typeDictionaryString);
+
public XEnum> getEntityTypes();
public F setEntityTypes(XEnum> entityTypes);
@@ -66,6 +69,14 @@ public static SerializerFoundation> New()
return new SerializerFoundation.Default<>();
}
+ public static SerializerFoundation> New(String typeDictionaryString)
+ {
+ SerializerFoundation> foundation = new SerializerFoundation.Default<>();
+ foundation.setInitialTypeDictionary(typeDictionaryString);
+
+ return foundation;
+ }
+
public static class Default>
extends BinaryPersistenceFoundation.Default
@@ -96,6 +107,15 @@ public F setSerializerTypeInfoStrategyCreator(final SerializerTypeInfoStrategyCr
return this.$();
}
+ @Override
+ public F setInitialTypeDictionary(String typeDictionaryString)
+ {
+ this.setTypeDictionaryLoader(()->typeDictionaryString);
+ this.ensureTypeDictionaryProvider();
+
+ return this.$();
+ }
+
@Override
public XEnum> getEntityTypes()
{
@@ -269,12 +289,17 @@ protected PersistenceTypeDictionaryManager ensureTypeDictionaryManager()
{
final PersistenceTypeDictionaryManager newTypeDictionaryManager =
PersistenceTypeDictionaryManager.Transient(
- this.getTypeDictionaryCreator()
+ this.getTypeDictionaryProvider()
)
;
return newTypeDictionaryManager;
}
+ @Override
+ protected PersistenceTypeDictionaryLoader ensureTypeDictionaryLoader() {
+ return () -> null;
+ }
+
}
}
diff --git a/serializer/src/main/java/org/eclipse/serializer/TypedSerializer.java b/serializer/src/main/java/org/eclipse/serializer/TypedSerializer.java
index 0d342545..8ecc2217 100644
--- a/serializer/src/main/java/org/eclipse/serializer/TypedSerializer.java
+++ b/serializer/src/main/java/org/eclipse/serializer/TypedSerializer.java
@@ -351,6 +351,13 @@ public synchronized void close()
}
}
+ @Override
+ public String exportTypeDictionay()
+ {
+ return this.foundation.getTypeDictionaryAssembler()
+ .assemble(this.persistenceManager.typeDictionary());
+ }
+
private void initialize()
{
if(this.persistenceManager == null)