From: Clebert S. <csu...@jb...> - 2006-07-10 16:35:58
|
User: csuconic Date: 06/07/10 12:35:57 Modified: src/org/jboss/serial/classmetamodel ClassMetamodelFactory.java Log: JBSER-82 - a better fix due to testcase failures on cruisecontrol Revision Changes Path 1.47 +12 -69 jboss-serialization/src/org/jboss/serial/classmetamodel/ClassMetamodelFactory.java (In the diff below, changes in quantity of whitespace are not shown.) Index: ClassMetamodelFactory.java =================================================================== RCS file: /cvsroot/jboss/jboss-serialization/src/org/jboss/serial/classmetamodel/ClassMetamodelFactory.java,v retrieving revision 1.46 retrieving revision 1.47 diff -u -b -r1.46 -r1.47 --- ClassMetamodelFactory.java 6 Jul 2006 16:07:59 -0000 1.46 +++ ClassMetamodelFactory.java 10 Jul 2006 16:35:57 -0000 1.47 @@ -41,7 +41,7 @@ import org.jboss.serial.util.PartitionedWeakHashMap; /** - * $Id: ClassMetamodelFactory.java,v 1.46 2006/07/06 16:07:59 csuconic Exp $ + * $Id: ClassMetamodelFactory.java,v 1.47 2006/07/10 16:35:57 csuconic Exp $ * @author clebert suconic */ public class ClassMetamodelFactory implements ClassMetaConsts @@ -266,67 +266,17 @@ clazz = resolver.resolveClass(clazzName); if (clazz==null) { - clazz = loader.loadClass(clazzName); + clazz = Class.forName(clazzName,false,loader); } } else { - clazz = loader.loadClass(clazzName); + clazz = Class.forName(clazzName,false,loader); } } return clazz; } - private static Class resolveArrayByName(String clazzName,ClassResolver resolver,ClassLoader loader) throws ClassNotFoundException - { - return Class.forName(clazzName,true,loader); - /*String realClassName = clazzName; - if (realClassName.endsWith(";")) - { - realClassName = realClassName.substring(0,realClassName.length()-1); - } - - int deep=0; - while (realClassName.startsWith("[")) - { - deep++; - realClassName = realClassName.substring(1); - } - - realClassName = realClassName.substring(1); - - Class typeArray = resolveClassByName(realClassName,resolver,loader);; - - int arrayDeep[] = new int[deep]; - for (int i=0;i<deep;i++) - { - arrayDeep[i]=1; - } - - return Array.newInstance(typeArray, arrayDeep).getClass(); */ - } - - private static ClassMetaData loadClassMetaDataArray(String clazzName, ClassResolver resolver, ClassLoader loader, boolean checkSerializable) throws IOException, ClassNotFoundException - { - /*if (!clazzName.startsWith("[")) - { - throw new RuntimeException("Not an array"); - } This is a private method. No need to do this test */ - - Class clazz = (Class)primClasses.get(clazzName); - - if (clazz!=null) - { - return getClassMetaData(clazz,checkSerializable); - } - else - { - Class arrayType = resolveArrayByName(clazzName,resolver,loader); - return getClassMetaData(arrayType,checkSerializable); - } - - } - public static ClassMetaData getClassMetaData(String clazzName, ClassResolver resolver, ClassLoader loader, boolean checkSerializable) throws IOException { try @@ -336,13 +286,6 @@ if (classMetadata==null) { - if (clazzName.startsWith("[")) - { - classMetadata= loadClassMetaDataArray(clazzName,resolver,loader,checkSerializable); - } - else - { - Class clazz = resolveClassByName(clazzName, resolver, loader); if (checkSerializable && !Serializable.class.isAssignableFrom(clazz)) @@ -350,7 +293,7 @@ throw new NotSerializableException(clazz.getName()); } classMetadata = new ClassMetaData(clazz); - } + loaderMap = getLoaderMap(loader); loaderMap.put(clazzName,classMetadata); classMetadata = (ClassMetaData)loaderMap.get(clazzName); @@ -366,7 +309,7 @@ { log.debug("Rebuilding clazz due to cross Loader GC (getClassMetaData(String class, ClassLoader loader)"); } - Class clazz = loader.loadClass(clazzName); + Class clazz = resolveClassByName(clazzName,resolver,loader); loaderMap.remove(clazzName); classMetadata = new ClassMetaData(clazz); loaderMap.put(clazz.getName(),classMetadata); |