Obtener información de clases Java en aplicaciones web

1
10753

Introducción

En nuestro quehacer diario en Autentia, nos encontramos en multitud de ocasiones con problemas de carga de clases en Java. Estos problemas suelen dar lugar a excepciones de tipo ClassNotFoundException, NoSuchMethodError, etc., y son bastante difíciles de diagnosticar (sobre todo en entornos JEE donde se suele usar una jerarquía de ClassLoaders compleja).

Para estos casos, os proponemos el uso de la siguiente página JSP (compatible con JRE1.4) en la que se vuelca toda la información disponible mediante reflexión sobre la clase que se pida. Consiste en un formulario donde se debe escribir el nombre completo cualificado de la clase. Al pulsar el botón, el servidor nos devolverá una información exhaustiva de la clase: en que JAR se encuentra, su ClassLoader, interfaces que implementa, clases internas, campos, constructores y métodos.

Hale ¡A disfrutarlo¡

C&oacutedigo fuente

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.lang.reflect.*" %>
<%@page import="java.net.*" %>
<%@page import="java.io.*" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%!
  public String getPathToClassOrJar( Class clazz )
  {
    String cn = "/" + clazz.getName();
    cn = cn.replace('.', '/');
    cn += ".class";
    URL url = clazz.getResource(cn);
    String path = url.getPath();
    return path;
  }

  public void putInfo( JspWriter out, String key, String value ) throws IOException
  {
    out.println("<tr><td style='border-bottom: 1px solid #707070' nowrap><b>"+key+"</b></td><td 
    style='border-bottom: 1px solid #707070'>"+value+"</td></tr>");
  }
%>

<%
  String cmd = request.getParameter("cmd");
  String className = request.getParameter("class");

  if( cmd==null ) cmd = "";
  if( className==null ) className = "";
%>
   
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Class Info</title>
    </head>
    <body>

    <h1>Class Info</h1>
    
    <form method="post">
      Type the fully qualified name of a class (example: java.lang.String) for which you want
       to get info:<br/>
      <input type="text" name="class" value="<%=className%>" size="128"/><br/><br/>
      <input type="submit" name="cmd" value="Get class info"/><br/>
    </form>
    
    <%
      if( !cmd.equals("") )
      {
	out.println( "<h1>Information for class <i>"+className+"</i>:</h1>" );
	
	out.println( "<table>" );
	try
	{
	  Class clazz = Class.forName(className);
	
	  String location = getPathToClassOrJar(clazz);
	  putInfo( out, "Class location:", location );
	
	  ClassLoader loader = clazz.getClassLoader();
	  if( loader == null ){
	    putInfo( out, "Class loader:", ClassLoader.getSystemClassLoader().toString() );
	  } else {
	    putInfo( out, "Class loader:", loader.toString() );
	  }
	
	  Class[] ifaces = clazz.getInterfaces();
	  for( Class iface : ifaces )
	  {
	    putInfo( out, "Implemented interface:", iface.getName() );
	  }
	
	  Class[] inners = clazz.getDeclaredClasses();
	  for( Class inner : inners )
	  {
	    putInfo( out, "Inner class:", inner.getName() );
	  }

	  Field[] fields = clazz.getDeclaredFields();
	  for( Field field : fields )
	  {
	    putInfo( out, "Field:", field.toString() );
	  }
	
	  Constructor[] ctors = clazz.getConstructors();
	  for( Constructor ctor : ctors )
	  {
	    putInfo( out, "Constructor:", ctor.toString() );
	  }
	
	  Method[] methods = clazz.getDeclaredMethods();
	  for( Method method : methods )
	  {
	    putInfo( out, "Method:", method.toString() );
	  }
	}
	catch( ClassNotFoundException e )
	{
	  putInfo( out, "Class not found.", "" );
	}
	catch( Throwable e )
	{
	  putInfo( out, "Error analyzing class:", e.toString() );
	}
	out.println( "</table>" );
      }
    %>

    </body>
</html>

1 COMENTARIO

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad