private static List<ColumnMetaData> getColumnChildren(final Element parent) {
        final List<ColumnMetaData> columnResults = new ArrayList<ColumnMetaData>();
        final Set<String> columnNames = new HashSet<String>();
        final Iterator<Element> xmlChildren = parent.getChildren("COLUMN").iterator();

        while (xmlChildren.hasNext()) {
            final ColumnMetaData cmd = new ColumnMetaData();
            final Element xmlColumn = xmlChildren.next();

            // make sure the name attribute is present on the column
            final String columnName = xmlColumn.getAttributeValue("name");
            if (columnName == null) {
                throw new IllegalArgumentException("Name attribute is required on the column tag!");
            }

            // make sure the names in columnInfo are unique
            if (columnNames.contains(columnName)) {
                throw new IllegalArgumentException("Duplicate name column '" + columnName + "'");
            }

            cmd.setColName(columnName);
            columnNames.add(columnName);

            // check to see if the column length can be set
            if (xmlColumn.getAttributeValue("length") != null) {
                try {
                    cmd.setColLength(Integer.parseInt(xmlColumn.getAttributeValue("length")));
                } catch (final Exception ex) {
                    throw new IllegalArgumentException("LENGTH ATTRIBUTE ON COLUMN ELEMENT MUST BE AN INTEGER.  GOT: "
                            + xmlColumn.getAttributeValue("length"), ex);
                }
            }
            columnResults.add(cmd);
        }

        return columnResults;
    }