in hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java [343:431]
protected Serializer loadSerializer(Class<?> cl)
throws HessianProtocolException {
Serializer serializer = null;
for (int i = 0;
_factories != null && i < _factories.size();
i++) {
AbstractSerializerFactory factory;
factory = (AbstractSerializerFactory) _factories.get(i);
serializer = factory.getSerializer(cl);
if (serializer != null)
return serializer;
}
serializer = _contextFactory.getSerializer(cl.getName());
if (serializer != null)
return serializer;
ClassLoader loader = cl.getClassLoader();
if (loader == null)
loader = _systemClassLoader;
ContextSerializerFactory factory = null;
factory = ContextSerializerFactory.create(loader);
serializer = factory.getCustomSerializer(cl);
if (serializer != null) {
return serializer;
}
if (HessianRemoteObject.class.isAssignableFrom(cl)) {
return new RemoteSerializer();
} else if (InetAddress.class.isAssignableFrom(cl)) {
return InetAddressSerializer.create();
} else if (isZoneId(cl)) //must before "else if (JavaSerializer.getWriteReplace(cl) != null)"
return ZoneIdSerializer.getInstance();
else if (JavaSerializer.getWriteReplace(cl) != null) {
Serializer baseSerializer = getDefaultSerializer(cl);
return new WriteReplaceSerializer(cl, getClassLoader(), baseSerializer);
} else if (Map.class.isAssignableFrom(cl)) {
if (_mapSerializer == null)
_mapSerializer = new MapSerializer();
return _mapSerializer;
} else if (Collection.class.isAssignableFrom(cl)) {
if (_collectionSerializer == null) {
_collectionSerializer = new CollectionSerializer();
}
return _collectionSerializer;
} else if (cl.isArray()) {
return new ArraySerializer();
} else if (Throwable.class.isAssignableFrom(cl))
return new ThrowableSerializer(getDefaultSerializer(cl));
else if (InputStream.class.isAssignableFrom(cl))
return new InputStreamSerializer();
else if (Iterator.class.isAssignableFrom(cl))
return IteratorSerializer.create();
else if (Calendar.class.isAssignableFrom(cl))
return CalendarSerializer.SER;
else if (Enumeration.class.isAssignableFrom(cl))
return EnumerationSerializer.create();
else if (Enum.class.isAssignableFrom(cl))
return new EnumSerializer(cl);
else if (Annotation.class.isAssignableFrom(cl))
return new AnnotationSerializer(cl);
else if (BitSet.class.isAssignableFrom(cl))
return BitSetSerializer.create();
else if (RecordUtil.isRecord(cl))
return new RecordSerializer(cl);
return getDefaultSerializer(cl);
}