Changeset 4393
- Timestamp:
- Aug 13, 2008, 1:22:16 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/core/net/sf/basedb/util/JarClassLoader.java
r4391 r4393 31 31 import java.util.HashMap; 32 32 import java.util.Enumeration; 33 import java.util.Vector; 33 34 import java.util.jar.JarFile; 34 35 import java.util.jar.JarEntry; … … 178 179 the class implementation can be found. 179 180 */ 180 private final Map<String, File> classPath;181 private final Map<String, List<File>> classPath; 181 182 182 183 /** … … 215 216 this.jarTimeStamp = mainJarFile.lastModified(); 216 217 this.jarSize = mainJarFile.length(); 217 classPath = new HashMap<String, File>();218 classPath = new HashMap<String, List<File>>(); 218 219 jarFiles = new ArrayList<JarInfo>(); 219 220 loadJarFile(mainJarFile, true); … … 229 230 { 230 231 log.debug("findClass: " + name); 231 File file= classPath.get(classNameToPath(name));232 if (file == null)232 List<File> files = classPath.get(classNameToPath(name)); 233 if (files == null || files.isEmpty()) 233 234 { 234 235 throw new ClassNotFoundException(name); 235 236 } 236 byte[] b = loadClassData(file , name);237 byte[] b = loadClassData(files.get(0), name); 237 238 return defineClass(name, b, 0, b.length); 238 239 } … … 245 246 try 246 247 { 247 File file = classPath.get(name); 248 if (file != null) 249 { 250 String newUrl = "jar:"+file.toURI().toURL()+"!/"+name; 248 List<File> files = classPath.get(name); 249 if (files != null && files.size() > 0) 250 { 251 if (log.isDebugEnabled()) log.debug("Found: " + files); 252 String newUrl = "jar:"+files.get(0).toURI().toURL()+"!/"+name; 251 253 url = new URL(newUrl); 254 } 255 else 256 { 257 log.debug("Not found: " + name); 258 } 259 } 260 catch (MalformedURLException ex) 261 { 262 ex.printStackTrace(); 263 } 264 return url; 265 } 266 267 @Override 268 protected Enumeration<URL> findResources(String name) 269 { 270 log.debug("findResources: " + name); 271 Enumeration<URL> url = null; 272 try 273 { 274 List<File> files = classPath.get(name); 275 if (files != null && files.size() > 0) 276 { 277 if (log.isDebugEnabled()) log.debug("Found: " + files); 278 Vector<URL> v = new Vector<URL>(); 279 for (File f : files) 280 { 281 String newUrl = "jar:"+f.toURI().toURL()+"!/"+name; 282 v.add(new URL(newUrl)); 283 } 284 url = v.elements(); 252 285 } 253 286 else … … 276 309 if (log.isDebugEnabled()) log.debug("getResource: " + name); 277 310 return super.getResource(name); 311 } 312 313 @Override 314 public Enumeration<URL> getResources(String name) 315 throws IOException 316 { 317 if (log.isDebugEnabled()) log.debug("getResources: " + name); 318 return super.getResources(name); 278 319 } 279 320 // ------------------------------------------- … … 347 388 if (jarEntry.isDirectory()) continue; 348 389 String name = jarEntry.getName(); 349 if (!classPath.containsKey(name)) 350 { 351 log.trace("Adding: " + name); 352 classPath.put(name, file); 353 } 354 else 355 { 356 log.warn("Duplicate resource: '" + name + "' in '" + file + "'; also exists in '" 357 + classPath.get(name) + "'"); 358 } 390 log.trace("Adding: " + name); 391 List<File> list = classPath.get(name); 392 if (list == null) 393 { 394 list = new ArrayList<File>(); 395 classPath.put(name, list); 396 } 397 list.add(file); 359 398 } 360 399 if (followClassPath)
Note: See TracChangeset
for help on using the changeset viewer.