Obtener información de clase en tiempo de ejecución de la web? Algo así como javap pero en tiempo de ejecución en la clase cargada en la memoria

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

  •  22-09-2019
  •  | 
  •  

Pregunta

Estoy trabajando con Websphere y complicados problemas de carga de clases. Quiero ser capaz de descargar o imprimir la información que normalmente se imprimen por javap (los métodos, etc.).

También puede ser necesario para obtener los datos binarios sin clase, para realizar un diff binario.

¿Cómo hacer esto?

¿Fue útil?

Solución

Se puede escribir un servlet o MBean JMX que expone la clase a la que su 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

El parámetro de recursos tiene que ser el archivo class your.ClassName -> su / nombredeclase.class. entonces usted puede guardar el archivo y el uso javap.

(creo que el MBean tiene que codificar el archivo de clase en una cadena (por ejemplo, base 64) como byte [] no es compatible. Pero no estoy seguro de eso. El resto sería el mismo.)

Si esto se desplegará en la producción de algún tipo de autenticación debe ser configurado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top