Domanda

Sto lavorando a un progetto in cui stiamo effettuando molti trasferimenti di oggetti remoti tra un servizio Java e client scritti in altre lingue. Dati i nostri attuali vincoli, ho deciso di vedere cosa ci sarebbe voluto per generare codice basato su una classe Java esistente. Fondamentalmente ho bisogno di prendere un file .class (o una loro raccolta) per analizzare il bytecode per determinare tutti i membri dei dati e forse getter / setter e quindi scrivere qualcosa che possa generare codice in un'altra lingua per creare una classe con la stessa struttura.

Non sto cercando decompilatori standard come JAD. Devo essere in grado di prendere un file .class e creare un modello a oggetti dei suoi membri e metodi di dati. È possibile?

È stato utile?

Soluzione

Ho usato BCEL e lo trovo davvero piuttosto imbarazzante. ASM è molto meglio. Usa molto i visitatori (il che può essere un po 'confuso) e non crea un modello a oggetti. Non creare un modello a oggetti risulta essere un vantaggio, poiché è improbabile che qualsiasi modello che si desidera creare assomigli a un'interpretazione letterale di tutti i dati.

Altri suggerimenti

Ho usato BCEL in passato ed è stato abbastanza facile da usare. È stato qualche anno fa, quindi ora potrebbe esserci qualcosa di meglio.

Apache Jakarta BCEL

Dalla tua descrizione, sembra basterebbe una semplice riflessione . Puoi scoprire tutta la struttura statica della classe, nonché accedere ai campi di una particolare istanza.

Passerei a BCEL solo se stai cercando di tradurre le istruzioni del metodo. (E se è quello che stai cercando di automatizzare, buona fortuna!)

Sono scioccato dal fatto che nessuno abbia ancora menzionato ASM . È la migliore libreria di bytecode che i tuoi soldi possono comprare. Bene, ok è gratis.

JAD è un decompilatore java che non consente l'accesso programmatico. Non è più immediatamente disponibile e probabilmente non funzionerà per progetti più recenti con bytecode Java7.

Penso che anche javassist possa aiutarti.

http://www.jboss.org/javassist/

Non ho mai avuto bisogno di usarlo, ma se ci provi ci faresti sapere i tuoi commenti al riguardo?

Anche se penso che sia più per la manipolazione di bytecode che per l'ispezione .class.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top