Obtener información de clases Java en aplicaciones web

Este pequeño tutorial nos hablará de como obtener información de clases Java en aplicaciones web muy útil cuando tenemos algún problema de carga de clases en Java

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>

Comentarios

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

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

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultor tecnológico de desarrollo de proyectos informáticos.Ingeniero en Informática

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

10/06/2025

Iván Suarez Romero

Aprende cómo migrar tu sitio Joomla 3 a Joomla 5 de forma segura, manteniendo el diseño, la funcionalidad y compatibilidad con extensiones. Una guía paso a paso con recomendaciones, imágenes y buenas prácticas para actualizar sin sorpresas.

04/06/2025

Gonzalo Matarrubia González

Descubre qué es Yocto Project, sus ventajas, usos reales en Izertis y cómo crear tu propia distribución Linux para Raspberry Pi paso a paso, de forma sencilla y flexible.

30/05/2025

Roberto José

¿Trabajas con Drupal y SonarQube 9.9? En este artículo exploramos cómo adaptar el análisis estático para evitar falsos positivos, desactivar reglas conflictivas del Quality Profile y delegar el estilo a PHP CodeSniffer. Una guía práctica para mejorar la integración sin depender aún de SonarQube 10.