// replace 'Throwable' with something else in production code :-) JavaClass recipe() throws Throwable { URLClassLoader loader = new URLClassLoader(new URL[] { new URL("file:///usr/share/java/js.jar"), }); String path = "org/mozilla/classfile/ByteCode.class"; InputStream resource = loader.getResourceAsStream(path); String fake_filename = "<" + path + ">"; ClassParser classparser = new ClassParser(resource, fake_filename); JavaClass java_class = classparser.parse(); // System.out.format("%s\n", jc); return java_class; }
ClassParser parser=new ClassParser(getClass().getResourceAsStream("/my/package/MyClass.class"), "MyClass.class"); JavaClass javaClass=parser.parse(); javaClass.getMethods(); // Get whatever info you need
ClassParser cp = new ClassParser( "A.class" ); JavaClass jc = cp.parse(); Method[] m = jc.getMethods();
ClassParser cp = new ClassParser("TestClass.class"); JavaClass jc = cp.parse(); ConstantPool constantPool = jc.getConstantPool(); // Get the constant pool here. for (Constant c : constantPool.getConstantPool()) { System.out.println(c); // Do what you need to do with all the constants. }
protected void processAnnotationsStream(InputStream is) throws ClassFormatException, IOException { ClassParser parser = new ClassParser(is, null); JavaClass clazz = parser.parse(); AnnotationEntry[] annotationsEntries = clazz.getAnnotationEntries(); for (AnnotationEntry ae : annotationsEntries) { String type = ae.getAnnotationType(); if ("Ljavax/servlet/annotation/WebServlet;".equals(type)) { hasWebAnnotations=true; }else if ("Ljavax/servlet/annotation/WebFilter;".equals(type)) { hasWebAnnotations=true; }else if ("Ljavax/servlet/annotation/WebListener;".equals(type)) { hasWebAnnotations=true; }else if ("Ljavax/servlet/annotation/WebInitParam;".equals(type)) { hasWebAnnotations=true; }else if ("Ljavax/servlet/annotation/MultipartConfig;".equals(type)) { hasWebAnnotations=true; } else { // Unknown annotation - ignore } } }
import java.io.IOException; import org.apache.bcel.classfile.ClassParser; import org.apache.bcel.classfile.JavaClass; import org.apache.bcel.util.ClassPath; public class BcelTest { public static void main(String[] args) throws IOException { String classPath=System.getProperty("java.class.path"); // demonstrating with our own class path examplary for an arbitrary path String ClassPath cp=new ClassPath(classPath); ClassPath.ClassFile cf=cp.getClassFile(BcelTest.class.getName()); ClassParser p=new ClassParser(cf.getInputStream(), cf.getPath()); JavaClass jc = p.parse(); System.out.println(jc); // or just using our own system path explicitly cf=ClassPath.SYSTEM_CLASS_PATH.getClassFile("java.lang.Object"); p=new ClassParser(cf.getInputStream(), cf.getPath()); jc = p.parse(); System.out.println(jc); } }
protected void processAnnotationsStream(InputStream is, WebXml fragment, boolean handlesTypesOnly, Map<String,JavaClassCacheEntry> javaClassCache) throws ClassFormatException, IOException { ClassParser parser = new ClassParser(is); JavaClass clazz = parser.parse(); checkHandlesTypes(clazz, javaClassCache); if (handlesTypesOnly) { return; } processClass(fragment, clazz); }
@Override protected void processClasses(final WebXml webXml, final Set<WebXml> orderedFragments) { final ClassLoader loader = context.getLoader().getClassLoader(); orderedFragments.forEach(fragment -> { final WebXml annotations = new WebXml(); annotations.setDistributable(true); final URL url = fragment.getURL(); final Collection<Class<?>> classes = webClasses.get(url.toExternalForm()); if (classes == null) { return; } classes.forEach(clazz -> { try (final InputStream stream = loader.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) { processClass(annotations, new ClassParser(stream).parse()); } catch (final IOException e) { new LogFacade(MeecrowaveContextConfig.class.getName()).error("Can't parse " + clazz); } }); fragment.merge(singleton(annotations)); }); }
@Override protected void processClasses(final WebXml webXml, final Set<WebXml> orderedFragments) { final ClassLoader loader = context.getLoader().getClassLoader(); orderedFragments.forEach(fragment -> { final WebXml annotations = new WebXml(); annotations.setDistributable(true); final URL url = fragment.getURL(); final Collection<Class<?>> classes = webClasses.get(url.toExternalForm()); if (classes == null) { return; } classes.forEach(clazz -> { try (final InputStream stream = loader.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) { processClass(annotations, new ClassParser(stream).parse()); } catch (final IOException e) { new LogFacade(MeecrowaveContextConfig.class.getName()).error("Can't parse " + clazz); } }); fragment.merge(singleton(annotations)); }); }
protected void processAnnotationsStream(InputStream is, WebXml fragment) throws ClassFormatException, IOException { ClassParser parser = new ClassParser(is, null); JavaClass clazz = parser.parse(); checkHandlesTypes(clazz); String className = clazz.getClassName(); AnnotationEntry[] annotationsEntries = clazz.getAnnotationEntries(); for (AnnotationEntry ae : annotationsEntries) { String type = ae.getAnnotationType(); if ("Ljavax/servlet/annotation/WebServlet;".equals(type)) { processAnnotationWebServlet(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebFilter;".equals(type)) { processAnnotationWebFilter(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebListener;".equals(type)) { fragment.addListener(className); } else { // Unknown annotation - ignore } } }
protected void processAnnotationsStream(InputStream is, WebXml fragment) throws ClassFormatException, IOException { ClassParser parser = new ClassParser(is, null); JavaClass clazz = parser.parse(); checkHandlesTypes(clazz); String className = clazz.getClassName(); AnnotationEntry[] annotationsEntries = clazz.getAnnotationEntries(); for (AnnotationEntry ae : annotationsEntries) { String type = ae.getAnnotationType(); if ("Ljavax/servlet/annotation/WebServlet;".equals(type)) { processAnnotationWebServlet(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebFilter;".equals(type)) { processAnnotationWebFilter(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebListener;".equals(type)) { fragment.addListener(className); } else { // Unknown annotation - ignore } } }
protected void processAnnotationsStream(InputStream is, WebXml fragment) throws ClassFormatException, IOException { ClassParser parser = new ClassParser(is, null); JavaClass clazz = parser.parse(); checkHandlesTypes(clazz); String className = clazz.getClassName(); AnnotationEntry[] annotationsEntries = clazz.getAnnotationEntries(); for (AnnotationEntry ae : annotationsEntries) { String type = ae.getAnnotationType(); if ("Ljavax/servlet/annotation/WebServlet;".equals(type)) { processAnnotationWebServlet(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebFilter;".equals(type)) { processAnnotationWebFilter(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebListener;".equals(type)) { fragment.addListener(className); } else { // Unknown annotation - ignore } } }
protected void processAnnotationsStream(InputStream is, WebXml fragment) throws ClassFormatException, IOException { ClassParser parser = new ClassParser(is, null); JavaClass clazz = parser.parse(); checkHandlesTypes(clazz); String className = clazz.getClassName(); AnnotationEntry[] annotationsEntries = clazz.getAnnotationEntries(); for (AnnotationEntry ae : annotationsEntries) { String type = ae.getAnnotationType(); if ("Ljavax/servlet/annotation/WebServlet;".equals(type)) { processAnnotationWebServlet(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebFilter;".equals(type)) { processAnnotationWebFilter(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebListener;".equals(type)) { fragment.addListener(className); } else { // Unknown annotation - ignore } } }
private void populateJavaClassCache(String className) { if (!javaClassCache.containsKey(className)) { String name = className.replace('.', '/') + ".class"; InputStream is = context.getLoader().getClassLoader().getResourceAsStream(name); if (is == null) { return; } ClassParser parser = new ClassParser(is, null); try { JavaClass clazz = parser.parse(); populateJavaClassCache(clazz.getClassName(), clazz); } catch (ClassFormatException e) { log.debug(sm.getString("contextConfig.invalidSciHandlesTypes", className), e); } catch (IOException e) { log.debug(sm.getString("contextConfig.invalidSciHandlesTypes", className), e); } } }
private void populateJavaClassCache(String className, Map<String,JavaClassCacheEntry> javaClassCache) { if (!javaClassCache.containsKey(className)) { String name = className.replace('.', '/') + ".class"; try (InputStream is = context.getLoader().getClassLoader().getResourceAsStream(name)) { if (is == null) { return; } ClassParser parser = new ClassParser(is); JavaClass clazz = parser.parse(); populateJavaClassCache(clazz.getClassName(), clazz, javaClassCache); } catch (ClassFormatException e) { log.debug(sm.getString("contextConfig.invalidSciHandlesTypes", className), e); } catch (IOException e) { log.debug(sm.getString("contextConfig.invalidSciHandlesTypes", className), e); } } }
protected void processAnnotationsStream(InputStream is, WebXml fragment, boolean handlesTypesOnly, Map<String,JavaClassCacheEntry> javaClassCache) throws ClassFormatException, IOException { ClassParser parser = new ClassParser(is); JavaClass clazz = parser.parse(); checkHandlesTypes(clazz, javaClassCache); if (handlesTypesOnly) { return; } AnnotationEntry[] annotationsEntries = clazz.getAnnotationEntries(); if (annotationsEntries != null) { String className = clazz.getClassName(); for (AnnotationEntry ae : annotationsEntries) { String type = ae.getAnnotationType(); if ("Ljavax/servlet/annotation/WebServlet;".equals(type)) { processAnnotationWebServlet(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebFilter;".equals(type)) { processAnnotationWebFilter(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebListener;".equals(type)) { fragment.addListener(className); } else { // Unknown annotation - ignore } } } }
protected void processAnnotationsStream(InputStream is, WebXml fragment, boolean handlesTypesOnly) throws ClassFormatException, IOException { ClassParser parser = new ClassParser(is, null); JavaClass clazz = parser.parse(); checkHandlesTypes(clazz); if (handlesTypesOnly) { return; } String className = clazz.getClassName(); AnnotationEntry[] annotationsEntries = clazz.getAnnotationEntries(); for (AnnotationEntry ae : annotationsEntries) { String type = ae.getAnnotationType(); if ("Ljavax/servlet/annotation/WebServlet;".equals(type)) { processAnnotationWebServlet(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebFilter;".equals(type)) { processAnnotationWebFilter(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebListener;".equals(type)) { fragment.addListener(className); } else { // Unknown annotation - ignore } } }
protected void processAnnotationsStream(InputStream is, WebXml fragment, boolean handlesTypesOnly) throws ClassFormatException, IOException { ClassParser parser = new ClassParser(is, null); JavaClass clazz = parser.parse(); checkHandlesTypes(clazz); if (handlesTypesOnly) { return; } String className = clazz.getClassName(); AnnotationEntry[] annotationsEntries = clazz.getAnnotationEntries(); for (AnnotationEntry ae : annotationsEntries) { String type = ae.getAnnotationType(); if ("Ljavax/servlet/annotation/WebServlet;".equals(type)) { processAnnotationWebServlet(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebFilter;".equals(type)) { processAnnotationWebFilter(className, ae, fragment); }else if ("Ljavax/servlet/annotation/WebListener;".equals(type)) { fragment.addListener(className); } else { // Unknown annotation - ignore } } }
private void populateJavaClassCache(String className, Map<String,JavaClassCacheEntry> javaClassCache) { if (!javaClassCache.containsKey(className)) { String name = className.replace('.', '/') + ".class"; try (InputStream is = context.getLoader().getClassLoader().getResourceAsStream(name)) { if (is == null) { return; } ClassParser parser = new ClassParser(is); JavaClass clazz = parser.parse(); populateJavaClassCache(clazz.getClassName(), clazz, javaClassCache); } catch (ClassFormatException e) { log.debug(sm.getString("contextConfig.invalidSciHandlesTypes", className), e); } catch (IOException e) { log.debug(sm.getString("contextConfig.invalidSciHandlesTypes", className), e); } } }
private void populateJavaClassCache(String className) { if (!javaClassCache.containsKey(className)) { String name = className.replace('.', '/') + ".class"; InputStream is = context.getLoader().getClassLoader().getResourceAsStream(name); if (is == null) { return; } ClassParser parser = new ClassParser(is, null); try { JavaClass clazz = parser.parse(); populateJavaClassCache(clazz.getClassName(), clazz); } catch (ClassFormatException e) { log.debug(sm.getString("contextConfig.invalidSciHandlesTypes", className), e); } catch (IOException e) { log.debug(sm.getString("contextConfig.invalidSciHandlesTypes", className), e); } } }