in cppcache/src/SerializationRegistry.cpp [837:922]
std::shared_ptr<DataSerializable> DataSerializableHandler::deserialize(
DataInput& input, DSCode typeId) const {
int32_t classId = -1;
switch (typeId) {
case DSCode::CacheableUserData: {
classId = input.read();
break;
}
case DSCode::CacheableUserData2: {
classId = input.readInt16();
break;
}
case DSCode::CacheableUserData4: {
classId = input.readInt32();
break;
}
case DSCode::FixedIDDefault:
case DSCode::FixedIDByte:
case DSCode::FixedIDInt:
case DSCode::FixedIDNone:
case DSCode::FixedIDShort:
case DSCode::CacheableLinkedList:
case DSCode::Properties:
case DSCode::PdxType:
case DSCode::BooleanArray:
case DSCode::CharArray:
case DSCode::NullObj:
case DSCode::CacheableString:
case DSCode::Class:
case DSCode::JavaSerializable:
case DSCode::DataSerializable:
case DSCode::CacheableBytes:
case DSCode::CacheableInt16Array:
case DSCode::CacheableInt32Array:
case DSCode::CacheableInt64Array:
case DSCode::CacheableFloatArray:
case DSCode::CacheableDoubleArray:
case DSCode::CacheableObjectArray:
case DSCode::CacheableBoolean:
case DSCode::CacheableCharacter:
case DSCode::CacheableByte:
case DSCode::CacheableInt16:
case DSCode::CacheableInt32:
case DSCode::CacheableInt64:
case DSCode::CacheableFloat:
case DSCode::CacheableDouble:
case DSCode::CacheableDate:
case DSCode::CacheableFileName:
case DSCode::CacheableStringArray:
case DSCode::CacheableArrayList:
case DSCode::CacheableHashSet:
case DSCode::CacheableHashMap:
case DSCode::CacheableTimeUnit:
case DSCode::CacheableNullString:
case DSCode::CacheableHashTable:
case DSCode::CacheableVector:
case DSCode::CacheableIdentityHashMap:
case DSCode::CacheableLinkedHashSet:
case DSCode::CacheableStack:
case DSCode::CacheableASCIIString:
case DSCode::CacheableASCIIStringHuge:
case DSCode::CacheableStringHuge:
case DSCode::PDX_ENUM:
case DSCode::PDX:
break;
}
TypeFactoryMethod createType =
input.getCache()->getTypeRegistry().getCreationFunction(classId);
if (createType == nullptr) {
LOGERROR(
"Unregistered class ID %d during deserialization: Did the "
"application register serialization types?",
classId);
// instead of a null key or null value... an Exception should be thrown..
throw IllegalStateException("Unregistered class ID in deserialization");
}
std::shared_ptr<DataSerializable> serializableObject(
std::dynamic_pointer_cast<DataSerializable>(createType()));
serializableObject->fromData(input);
return serializableObject;
}