in yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeRepository.java [102:146]
protected TypeDescriptor computeValue(Class<?> type) {
if (type.isPrimitive()) {
return primitiveDescriptor(type);
} else if (type == String.class) {
return new StringDescriptor(repo);
} else if (type == Class.class) {
return new ClassDescriptor(repo);
} else if (type == ClassDesc.class) {
return new ClassDescDescriptor(repo);
} else if (type == java.util.Date.class) {
return new DateValueDescriptor(repo);
} else if (staticAnyTypes.contains(type)) {
return new AnyDescriptor(type, repo);
} else if ((IDLEntity.class.isAssignableFrom(type)) && isIDLEntity(type)) {
return new IDLEntityDescriptor(type, repo);
} else if (Throwable.class.isAssignableFrom(type)) {
return new ExceptionDescriptor(type, repo);
} else if (Enum.class == type) {
return new EnumDescriptor(type, repo);
} else if (Enum.class.isAssignableFrom(type)) {
Class<?> enumType = EnumSubclassDescriptor.getEnumType(type);
return ((enumType == type) ? new EnumSubclassDescriptor(type, repo) : get(enumType));
} else if (type.isArray()) {
return ArrayDescriptor.get(type, repo);
} else if (Remote.class.isAssignableFrom(type)) {
if (type.isInterface()) {
return new RemoteInterfaceDescriptor(type, repo);
} else {
return new RemoteClassDescriptor(type, repo);
}
} else if (!type.isInterface()
&& Serializable.class.isAssignableFrom(type)) {
return new ValueDescriptor(type, repo);
} else if (Object.class.isAssignableFrom(type)) {
if (isAbstractInterface(type)) {
logger.finer("encoding " + type + " as abstract interface");
return new AbstractObjectDescriptor(type, repo);
} else {
logger.finer("encoding " + type + " as a abstract value");
return new ValueDescriptor(type, repo);
}
} else {
throw new RuntimeException("cannot handle class " + type.getName());
}
}