code: protected boolean appendFoundJars(Node container, Document factory, 
          Vector v, String desc)
    {
  
      if ((null == v) || (v.size() < 1))
        return false;
  
      boolean errors = false;
  
      for (int i = 0; i < v.size(); i++)
      {
        Hashtable subhash = (Hashtable) v.elementAt(i);
  
        for (Enumeration keys = subhash.keys(); 
             keys.hasMoreElements();
             /* no increment portion */
            )
        {
          Object key = keys.nextElement();
          try
          {
            String keyStr = (String) key;
            if (keyStr.startsWith(ERROR))
            {
              errors = true;
            }
            Element node = factory.createElement("foundJar");
            node.setAttribute("name", keyStr.substring(0, keyStr.indexOf("-")));
            node.setAttribute("desc", keyStr.substring(keyStr.indexOf("-") + 1));
            node.appendChild(factory.createTextNode((String)subhash.get(keyStr)));
            container.appendChild(node);
          }
          catch (Exception e)
          {
            errors = true;
            Element node = factory.createElement("foundJar");
            node.appendChild(factory.createTextNode(ERROR + " Reading " + key + " threw: " + e.toString()));
            container.appendChild(node);
          }
        }
      }
      return errors;
    }
docs: Print out report of .jars found in a classpath.
  
  Takes the information encoded from a checkPathForJars()
  call and dumps it out to our PrintWriter.
  
  @param container Node to append our report to
  @param factory Document providing createElement, etc. services
  @param v Vector of Hashtables of .jar file info
  @param desc description to print out in header
  
  @return false if OK, true if any .jars were reported
  as having errors
  @see #checkPathForJars(String, String[])