private SerializerAdapter registerFromSuperType(final Class type, final Class superType) {
   final SerializerAdapter serializer = typeMap.get(superType);
   if (serializer != null) {
     safeRegister(type, serializer);
   }
   return serializer;
 }
 public void register(Class type, Serializer serializer) {
   if (type == null) {
     throw new IllegalArgumentException("Class type information is required!");
   }
   if (serializer.getTypeId() <= 0) {
     throw new IllegalArgumentException(
         "Type id must be positive! Current: "
             + serializer.getTypeId()
             + ", Serializer: "
             + serializer);
   }
   safeRegister(type, createSerializerAdapter(serializer));
 }
 public SerializerAdapter serializerFor(final Class type) {
   if (DataSerializable.class.isAssignableFrom(type)) {
     return dataSerializerAdapter;
   } else if (Portable.class.isAssignableFrom(type)) {
     return portableSerializerAdapter;
   } else {
     final SerializerAdapter serializer;
     if ((serializer = constantTypesMap.get(type)) != null) {
       return serializer;
     }
   }
   SerializerAdapter serializer = typeMap.get(type);
   if (serializer == null) {
     // look for super classes
     Class typeSuperclass = type.getSuperclass();
     final Set<Class> interfaces = new LinkedHashSet<Class>(5);
     getInterfaces(type, interfaces);
     while (typeSuperclass != null) {
       if ((serializer = registerFromSuperType(type, typeSuperclass)) != null) {
         break;
       }
       getInterfaces(typeSuperclass, interfaces);
       typeSuperclass = typeSuperclass.getSuperclass();
     }
     if (serializer == null) {
       // look for interfaces
       for (Class typeInterface : interfaces) {
         if ((serializer = registerFromSuperType(type, typeInterface)) != null) {
           break;
         }
       }
     }
     if (serializer == null && (serializer = global.get()) != null) {
       safeRegister(type, serializer);
     }
   }
   return serializer;
 }
  SerializationServiceImpl(
      InputOutputFactory inputOutputFactory,
      int version,
      ClassLoader classLoader,
      Map<Integer, ? extends DataSerializableFactory> dataSerializableFactories,
      Map<Integer, ? extends PortableFactory> portableFactories,
      Collection<ClassDefinition> classDefinitions,
      boolean checkClassDefErrors,
      ManagedContext managedContext,
      PartitioningStrategy partitionStrategy,
      int initialOutputBufferSize,
      boolean enableCompression,
      boolean enableSharedObject) {

    this.inputOutputFactory = inputOutputFactory;
    this.classLoader = classLoader;
    this.managedContext = managedContext;
    this.globalPartitioningStrategy = partitionStrategy;
    this.outputBufferSize = initialOutputBufferSize;

    PortableHookLoader loader = new PortableHookLoader(portableFactories, classLoader);
    serializationContext =
        new SerializationContextImpl(this, loader.getFactories().keySet(), version);
    for (ClassDefinition cd : loader.getDefinitions()) {
      serializationContext.registerClassDefinition(cd);
    }

    dataSerializerAdapter =
        new StreamSerializerAdapter(
            this, new DataSerializer(dataSerializableFactories, classLoader));
    portableSerializer = new PortableSerializer(serializationContext, loader.getFactories());
    portableSerializerAdapter = new StreamSerializerAdapter(this, portableSerializer);

    registerConstant(DataSerializable.class, dataSerializerAdapter);
    registerConstant(Portable.class, portableSerializerAdapter);
    registerConstant(Byte.class, new ByteSerializer());
    registerConstant(Boolean.class, new BooleanSerializer());
    registerConstant(Character.class, new CharSerializer());
    registerConstant(Short.class, new ShortSerializer());
    registerConstant(Integer.class, new IntegerSerializer());
    registerConstant(Long.class, new LongSerializer());
    registerConstant(Float.class, new FloatSerializer());
    registerConstant(Double.class, new DoubleSerializer());
    registerConstant(byte[].class, new TheByteArraySerializer());
    registerConstant(char[].class, new CharArraySerializer());
    registerConstant(short[].class, new ShortArraySerializer());
    registerConstant(int[].class, new IntegerArraySerializer());
    registerConstant(long[].class, new LongArraySerializer());
    registerConstant(float[].class, new FloatArraySerializer());
    registerConstant(double[].class, new DoubleArraySerializer());
    registerConstant(String.class, new StringSerializer());

    safeRegister(Date.class, new DateSerializer());
    safeRegister(BigInteger.class, new BigIntegerSerializer());
    safeRegister(BigDecimal.class, new BigDecimalSerializer());
    safeRegister(Externalizable.class, new Externalizer(enableCompression));
    safeRegister(Serializable.class, new ObjectSerializer(enableSharedObject, enableCompression));
    safeRegister(Class.class, new ClassSerializer());
    safeRegister(Enum.class, new EnumSerializer());

    registerClassDefinitions(classDefinitions, checkClassDefErrors);
  }
 void safeRegister(final Class type, final Serializer serializer) {
   safeRegister(type, createSerializerAdapter(serializer));
 }