Obtendo informações de classe de tempo de execução da web? Algo como Javap, mas em tempo de execução na aula carregada na memória

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

  •  22-09-2019
  •  | 
  •  

Pergunta

Estou trabalhando com problemas com o WebSphere e complicados de carga de classe. Quero poder baixar ou imprimir informações que normalmente seriam impressas pelo Javap (os métodos, etc.).

Também posso precisar obter os dados de classe binária bruta, para executar um diferencial binário.

Como você faria isso?

Foi útil?

Solução

Você pode escrever um servlet ou jmx mbean que expõe a classe ao seu 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

O parâmetro de recurso deve ser o seu arquivo de classe your.className -> your/ClassName.class. Você pode salvar o arquivo e usar o Javap.

(Acho que o mBean precisa codificar seu arquivo de classe em uma string (por exemplo, base 64) como byte [] não é suportado. Mas não tenho certeza disso. O resto seria o mesmo.)

Se isso for implantado em produção, alguma forma de autenticação deve ser configurada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top