code: private static Map<String, String> getIntrospectedProperties(String clz, URLClassLoader cl, PrintStream error)
     {
        Map<String, String> result = null;
  
        try
        {
           Class<?> c = Class.forName(clz, true, cl);
  
           result = new TreeMap<String, String>();
  
           Method[] methods = c.getMethods();
  
           for (Method m : methods)
           {
              if (m.getName().startsWith("set") && m.getParameterTypes().length == 1
                    && isValidType(m.getParameterTypes()[0]))
              {
                 String name = m.getName().substring(3);
  
                 if (name.length() == 1)
                 {
                    name = name.toLowerCase(Locale.US);
                 }
                 else
                 {
                    name = name.substring(0, 1).toLowerCase(Locale.US) + name.substring(1);
                 }
  
                 String type = m.getParameterTypes()[0].getName();
  
                 result.put(name, type);
              }
           }
        }
        catch (Throwable t)
        {
           // Nothing we can do
           t.printStackTrace(error);
        }
        return result;
     }
docs: Get the introspected properties for a class
  @param clz The fully qualified class name
  @param cl classloader
  @return The properties (name, type)