final Class<?> type = descriptor.getType();
final SerializableClass serializableClass = registry.lookup(type);
final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller();
final Externalizable obj;
if (serializableClass.hasObjectInputConstructor()) {
obj = (Externalizable) serializableClass.callObjectInputConstructor(blockUnmarshaller);
} else if (serializableClass.hasPublicNoArgConstructor()) {
obj = (Externalizable) serializableClass.callNoArgConstructor();
} else {
throw new InvalidClassException(type.getName(), "Class is non-public or has no public no-arg constructor");
}