Ottenere informazioni sulla classe di runtime dal Web? Qualcosa di simile javap ma in fase di esecuzione in classe caricato in memoria
Domanda
Sto lavorando con Websphere e le questioni classloading complicate. Voglio essere in grado di scaricare o stampare le informazioni che normalmente vengono stampati dalle javap (i metodi, ecc).
I Potrebbe anche essere necessario per ottenere i dati grezzi di classe binari, per eseguire un diff binario.
Come si dovrebbe fare questo?
Soluzione
Si potrebbe scrivere un servlet o JMX MBean che espone la classe per il vostro cliente.
Servlet:
String resourceParameter = ...;
OutputStream out = ...:
InputStream input = Thread.currentThread().getContextClassLoader()
.getResourceAsStream(resourceParameter)
write(input, out);
Cliente:
GET http://host/DiagnosticServlet?resource=your/ClassName.class
Il parametro di risorse deve essere il vostro file class your.ClassName -> il tuo / ClassName.class. È quindi possibile salvare il file e utilizzare javap.
(penso che il MBean deve codificare il file di classe in una stringa (ad esempio Base 64) come byte [] non è supportato. Ma io non sono sicuro di questo. Il resto sarebbe stato lo stesso.)
Se questo sarà schierato nella produzione qualche forma di autenticazione deve essere configurata.