Créer un objet BCEL JavaClass à partir d'un fichier .class arbitraire
Question
Je joue avec BCEL. Je ne l'utilise pas pour générer du bytecode, mais j'essaie plutôt d'inspecter la structure des classes compilées existantes.
Je dois pouvoir pointer sur un fichier .class arbitraire n'importe où sur mon disque dur et charger un JavaClass en fonction de cet objet. Idéalement, je voudrais éviter de devoir ajouter la classe donnée à mon chemin de classe.
La solution
La méthode la plus simple consiste à créer un ClassParser avec le nom de fichier et d’appeler parse (). Vous pouvez également utiliser SyntheticRepository et fournir un chemin de classe (ce n'est pas votre chemin de classe, IYSWIM).
Autres conseils
La classe .class existante peut être une classe chargée dans un objet de classe java lang. Ensuite, il peut être converti en structure de classe javac intermédiaire BCEL. Le code suivant peut aider: -
Class<?> javaClass1 = null;
javaClass1 = ucl.loadClass("com.sample.Customer");
org.apache.bcel.classfile.JavaClass javaClazz1=org.apache.bcel.Repository.lookupClass(javaClass1);
new ClassParser(classfilebytearrayhere).parse()