2008-10-02 17 views
12

Ich arbeite an einem Projekt, bei dem wir eine große Anzahl von Objektübertragungen zwischen einem Java-Dienst und Clients in verschiedenen Sprachen durchführen. Angesichts unserer aktuellen Einschränkungen habe ich mich entschlossen zu sehen, was es braucht, um Code basierend auf einer bestehenden Java-Klasse zu generieren. Grundsätzlich muss ich eine .class Datei (oder eine Sammlung von ihnen) den Bytecode analysieren, um alle Datenmitglieder und vielleicht Getters/Setter zu bestimmen und dann etwas schreiben, das Code in einer anderen Sprache ausgeben kann, um eine Klasse mit der gleichen Struktur zu erstellen .Programmgesteuertes Überprüfen von .Class-Dateien

Ich bin nicht auf der Suche nach Standard-Decompilern wie JAD. Ich muss in der Lage sein, eine .class Datei zu nehmen und ein Objektmodell seiner Datenmitglieder und -methoden zu verursachen. Ist das überhaupt möglich?

Antwort

12

Ich habe BCEL verwendet und finde es wirklich ziemlich peinlich. ASM ist viel besser. Es verwendet sehr häufig Besucher (was ein wenig verwirrend sein kann) und erstellt kein Objektmodell. Das Erstellen eines Objektmodells erweist sich als ein Bonus, da jedes Modell, das Sie erstellen möchten, wahrscheinlich nicht wie eine wörtliche Interpretation aller Daten aussieht.

+2

+1 für ASM über BCEL. Viel schönere API. – skaffman

+1

Tatsächlich bietet ASM ein Objektmodell, wenn Sie eines möchten. Siehe ihre Baum-API. –

+0

Nach Auswertung aller hier aufgeführten Optionen ist ASM definitiv die beste IMHO für die Untersuchung von .class-Dateien. Ich stimme zu, dass das Besuchermuster viel sauberer ist als das BCEL-Modell. Danke für den Tipp. –

1

Ich habe BCEL in der Vergangenheit verwendet und es war ziemlich einfach zu bedienen. Es war vor ein paar Jahren, also könnte es jetzt etwas Besseres geben.

Apache Jakarta BCEL

+0

Wow, Sie haben mich tatsächlich geschlagen, meine eigene Frage zu beantworten. Das war meine Standardwahl, ich wollte eine Frage stellen und sie selbst beantworten und sehen, ob jemand andere bessere Ideen hatte. Vielen Dank. –

0

Ich denke, Javassist könnte auch Ihnen helfen.

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

Ich hatte nie das Bedürfnis, es zu benutzen, aber wenn man es versuchen, würden Sie es uns wissen Ihre Kommentare lassen?

Obwohl ich denke, es ist mehr für Bytecode Manipulation als. Klasse Inspektion.

1

Aus Ihrer Beschreibung klingt es wie simple reflection würde ausreichen. Sie können sowohl die gesamte statische Struktur der Klasse erkennen als auch auf die Felder einer bestimmten Instanz zugreifen.

Ich würde nur zu BCEL weitergehen, wenn Sie versuchen, Methodenanweisungen zu übersetzen. (Und wenn Sie das automatisieren möchten, viel Glück!)

+0

Reflexion während eine mögliche Lösung, ist weniger als ideal. Ich möchte in der Lage sein, auf eine beliebige .class-Datei zu zeigen und sie zu dekonstruieren. Wenn ich Reflektionen verwenden würde, müsste ich den Classloader dazu bringen, die Klasse zu laden, bevor ich mit der Arbeit anfing. –

1

JAD ist ein Java Decompiler, der keinen programmatischen Zugriff erlaubt. Es ist nicht mehr ohne weiteres verfügbar und wird wahrscheinlich nicht für neuere Projekte mit Java7-Bytecodes funktionieren.

+0

JAD ist ein Decompiler, ich brauche etwas, das programmatisch funktioniert. –

+0

FYI, dieser Link ist tot ... – hichris123

+0

Dieser Link wurde korrigiert, mehr Text hinzugefügt. –

1

Ich bin schockiert, dass noch niemand ASM erwähnt hat. Es ist die beste Bytecode-Bibliothek, die Sie mit Ihrem Geld kaufen können. Nun, ok, es ist kostenlos.

Verwandte Themen