Ottenere informazioni sulla classe di runtime dal Web? Qualcosa di simile javap ma in fase di esecuzione in classe caricato in memoria

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

  •  22-09-2019
  •  | 
  •  

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?

È stato utile?

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.

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