Erhalten Sie Laufzeitklasseninformationen aus dem Web? So etwas wie Javap, aber zur Laufzeit auf dem Unterricht im Speicher geladen

StackOverflow https://stackoverflow.com/questions/1396449

  •  22-09-2019
  •  | 
  •  

Frage

Ich arbeite mit WebSphere und komplizierten Problemen mit dem Klassenladung. Ich möchte Informationen herunterladen oder drucken können, die normalerweise von Javap (die Methoden usw.) gedruckt werden.

Möglicherweise muss ich auch die rohen Binärklassendaten erhalten, um einen binären Diff durchzuführen.

Wie würdest du das machen?

War es hilfreich?

Lösung

Sie können ein Servlet oder ein JMX -MBEAN schreiben, das die Klasse Ihrem Kunden aussetzt.

Servlet:

String resourceParameter = ...;
OutputStream out = ...:
InputStream input = Thread.currentThread().getContextClassLoader()
   .getResourceAsStream(resourceParameter)
write(input, out);

Klient:

GET http://host/DiagnosticServlet?resource=your/ClassName.class

Der Ressourcenparameter muss Ihr sein Klassendatei your.className -> your/className.class. Sie können dann die Datei speichern und Javap verwenden.

(Ich denke, die MBEAN muss Ihre Klassendatei in eine Zeichenfolge (z. B. Basis 64) codieren, wie Byte [] nicht unterstützt wird. Aber ich bin mir nicht sicher. Der Rest wäre der gleiche.)

Wenn dies in der Produktion eingesetzt wird, sollte eine Form der Authentifizierung konfiguriert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top