diff -r ./jaxb-ri-base/runtime/src/com/sun/xml/bind/v2/runtime/reflect/opt/Injector.java ./jaxb-ri/runtime/src/com/sun/xml/bind/v2/runtime/reflect/opt/Injector.java 71,72c71,72 < private static final Map> injectors = < Collections.synchronizedMap(new WeakHashMap>()); --- > private static final Map injectors = > Collections.synchronizedMap(new WeakHashMap()); 85c85 < return injector.inject(className,image); --- > return injector.internalInject(cl,className,image); 96c96 < return injector.find(className); --- > return injector.internalFind(cl,className); 108,111c108,109 < Injector injector = null; < WeakReference wr = injectors.get(cl); < if(wr!=null) < injector = wr.get(); --- > Injector injector = injectors.get(cl); > 114c112 < injectors.put(cl,new WeakReference(injector = new Injector(cl))); --- > injectors.put(cl,injector = new Injector(cl)); 118a117 > 125,127c124 < private final Map classes = new HashMap(); < < private final ClassLoader parent; --- > private final Map> classes = new HashMap>(); 157,158c154 < private Injector(ClassLoader parent) { < this.parent = parent; --- > private Injector(ClassLoader parent) { 173c169 < private synchronized Class inject(String className, byte[] image) { --- > private synchronized Class internalInject(ClassLoader parent, String className, byte[] image) { 177c173,176 < Class c = classes.get(className); --- > Class c = null; > WeakReference ref = classes.get(className); > if (ref != null) > c = ref.get(); 196c195 < classes.put(className,c); --- > classes.put(className,new WeakReference(c)); 201,202c200,220 < private synchronized Class find(String className) { < return classes.get(className); --- > private synchronized Class internalFind(ClassLoader parent, String className) { > Class clazz = null; > WeakReference ref = classes.get(className); > if (ref != null) > { > clazz = ref.get(); > if (clazz==null) > { > // If we have a reference but no class the class must have been > // loaded at some point. > try { > clazz = parent.loadClass(className); > } catch (ClassNotFoundException e) { > // If this fails then null can be returned so the class can > // be redefined. > logger.log(Level.FINE,"Unable to load "+className,e); > } > } > } > > return clazz;