Creare un oggetto BCEL JavaClass da un file .class arbitrario
Domanda
Sto giocando con BCEL. Non lo sto usando per generare bytecode, ma invece sto cercando di ispezionare la struttura delle classi compilate esistenti.
Devo essere in grado di puntare a un file .class arbitrario ovunque sul mio disco rigido e caricare un JavaClass basato su quello. Idealmente, vorrei evitare di aggiungere la classe data al mio percorso di classe.
Soluzione
Il modo più semplice è creare un ClassParser con il nome del file e chiamare parse (). In alternativa puoi usare SyntheticRepository e fornire un percorso di classe (che non è il tuo percorso di classe, IYSWIM).
Altri suggerimenti
È possibile caricare la classe .class esistente nell'oggetto classe java lang. Quindi può essere convertito nella struttura javaclass intermedia BCEL. Il seguente codice può essere d'aiuto: -
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()