2009-09-08 2 views
1

Je travaille avec Websphere et des problèmes de chargement de classes complexes. Je veux pouvoir télécharger ou imprimer des informations qui seraient normalement imprimées par javap (les méthodes, etc.).Obtenir des informations de classe d'exécution à partir du Web? Quelque chose comme javap mais à l'exécution sur la classe chargée en mémoire

Je peux également avoir besoin des données de classe binaire brute, pour effectuer un diff binaire.

Comment voulez-vous faire cela?

+1

Il existe certains diagnostics de classeloader intégrés, accessibles via la console. Étaient-ils utiles? – djna

+0

Les API de réflexion (obj.getClass(). GetDeclaredMethods() et les amis) devraient être en mesure de vous procurer le maximum de ce que vous voulez. – jsight

Répondre

1

Vous pouvez écrire une servlet ou un MBean JMX qui expose la classe à votre client.

Servlet:

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

Client:

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

Le paramètre de ressource doit être votre fichier de classe your.ClassName -> votre/NomClasse.class. Vous pouvez ensuite enregistrer le fichier et utiliser javap.

(je pense que le MBean doit encoder votre fichier de classe dans une chaîne (par exemple, la base 64) comme octet [] n'est pas pris en charge. Mais je ne suis pas sûr. Le reste serait le même.)

Si cela doit être déployé en production, une forme d'authentification doit être configurée.

+0

Bien, j'aime bien. –

Questions connexes