private Module getModule(String moduleName) throws IOException { Module module = modules.get(moduleName); if (module == null) { module = new Module(moduleName, this); modules.put(moduleName, module); } return module; }
public void addResources(URL... urls) throws IOException { for (URL url : urls) { addResource0(url); } }
@SuppressWarnings("unused") public void unloadModule(String loggingModuleName) { if (modules.containsKey(loggingModuleName)) { Module unloaded = modules.remove(loggingModuleName); unloaded.cleanUp(); } } }
private void definePackageForClass(String className) { int i = className.lastIndexOf('.'); if (i != -1) { String pkgname = className.substring(0, i); //Check if already defined: Package pkg = getPackage(pkgname); if (pkg == null) { definePackage(pkgname, null, null, null, null, null, null, null); } } }
private Class<?> getLoadedClass(String className, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(className)) { Class<?> loadedClass = findLoadedClass(className); if (classes.containsKey(className)) { return classes.get(className); } if (byteCache.containsKey(className)) { definePackageForClass(className); byte[] classBytes = byteCache.get(className); if (loadedClass == null) { //We got here without Exception, meaning class was filtered from proxying. Load normally: try { loadedClass = defineClass(className, classBytes, 0, classBytes.length, this.getClass().getProtectionDomain()); } catch (NoClassDefFoundError | IncompatibleClassChangeError e) { throw new ClassNotFoundException(className, e); } } classes.put(className, loadedClass); if (resolve) { resolveClass(loadedClass); } return loadedClass; } else { return null; } } }
private void addDirectory(File directory) throws IOException { if (!directory.isDirectory()) { throw new IllegalStateException("Not a directory: " + directory); } File[] files = directory.listFiles(); if (files == null) { throw new IllegalStateException("No files found in " + directory); } for (File file : files) { if (file.isDirectory()) { addDirectory(file); } else if (file.getName().endsWith(".jar")) { try { addResource0(file.toURI().toURL()); } catch (IOException e) { throw new IllegalStateException(e); } } else { try { String relativeName = directory.toURI().relativize(file.toURI()).getPath(); FileInputStream fileInputStream = new FileInputStream(file); addClassIfClass(fileInputStream, relativeName); resources.put(relativeName, file.toURI().toURL()); fileInputStream.close(); } catch (MalformedURLException | FileNotFoundException e) { throw new IllegalStateException(e); } } } }
private void addClassIfClass(InputStream inputStream, String relativePath) throws IOException { if (relativePath.endsWith(".class")) { int len; ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] b = new byte[2048]; while ((len = inputStream.read(b)) > 0) { out.write(b, 0, len); } out.close(); byte[] classBytes = out.toByteArray(); String className = resourceToClassName(relativePath); addToByteCache(className, classBytes); } }
private void addResources(String moduleName, URL... urls) throws IOException { Module module = getModule(moduleName); module.addResources(urls); }
private Class<?> getLoadedClass(String className, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(className)) { Class<?> loadedClass = findLoadedClass(className); if (classes.containsKey(className)) { return classes.get(className); } if (byteCache.containsKey(className)) { definePackageForClass(className); byte[] classBytes = byteCache.get(className); if (loadedClass == null) { //We got here without Exception, meaning class was filtered from proxying. Load normally: try { loadedClass = defineClass(className, classBytes, 0, classBytes.length, this.getClass().getProtectionDomain()); } catch (NoClassDefFoundError | IncompatibleClassChangeError e) { throw new ClassNotFoundException(className, e); } } classes.put(className, loadedClass); if (resolve) { resolveClass(loadedClass); } return loadedClass; } else { return null; } } }
private void addDirectory(File directory) throws IOException { if (!directory.isDirectory()) { throw new IllegalStateException("Not a directory: " + directory); } File[] files = directory.listFiles(); if (files == null) { throw new IllegalStateException("No files found in " + directory); } for (File file : files) { if (file.isDirectory()) { addDirectory(file); } else if (file.getName().endsWith(".jar")) { try { addResource0(file.toURI().toURL()); } catch (IOException e) { throw new IllegalStateException(e); } } else { try { String relativeName = directory.toURI().relativize(file.toURI()).getPath(); FileInputStream fileInputStream = new FileInputStream(file); addClassIfClass(fileInputStream, relativeName); resources.put(relativeName, file.toURI().toURL()); fileInputStream.close(); } catch (MalformedURLException | FileNotFoundException e) { throw new IllegalStateException(e); } } } }
private void definePackageForClass(String className) { int i = className.lastIndexOf('.'); if (i != -1) { String pkgname = className.substring(0, i); //Check if already defined: Package pkg = getPackage(pkgname); if (pkg == null) { definePackage(pkgname, null, null, null, null, null, null, null); } } }
private void addClassIfClass(InputStream inputStream, String relativePath) throws IOException { if (relativePath.endsWith(".class")) { int len; ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] b = new byte[2048]; while ((len = inputStream.read(b)) > 0) { out.write(b, 0, len); } out.close(); byte[] classBytes = out.toByteArray(); String className = resourceToClassName(relativePath); addToByteCache(className, classBytes); } }
private void addResources(String moduleName, URL... urls) throws IOException { Module module = getModule(moduleName); module.addResources(urls); }
addClassIfClass(jarInputStream, jarEntry.getName()); if (logger != null) logger.trace("Added resource " + jarEntry.getName() + " to ClassLoader"); if (jarEntry.getName().endsWith(".jar")) { addResource0(contentUrl); } else { try { addDirectory(new File(url.toURI())); } catch (URISyntaxException e) { throw new IllegalStateException(e);
private Module getModule(String moduleName) throws IOException { Module module = modules.get(moduleName); if (module == null) { module = new Module(moduleName, this, logger); modules.put(moduleName, module); } return module; }
@SuppressWarnings("unused") public void unloadModule(String loggingModuleName) { if (modules.containsKey(loggingModuleName)) { Module unloaded = modules.remove(loggingModuleName); unloaded.cleanUp(); } } }
public void addResources(URL... urls) throws IOException { for (URL url : urls) { addResource0(url); } }
addClassIfClass(jarInputStream, jarEntry.getName()); logger.trace("Added resource " + jarEntry.getName() + " to ClassLoader"); if (jarEntry.getName().endsWith(".jar")) { addResource0(contentUrl); } else { try { addDirectory(new File(url.toURI())); } catch (URISyntaxException e) { throw new IllegalStateException(e);