public static String[] getRecursiveChildrenProperties(Element element, String parent) {
        String[] properties = getChildrenProperties(element, parent);
        if (properties.length == 0) {
            return properties;
        }
        else {
            List<String> list = new ArrayList<>(15);
            for (int i = 0; i < properties.length; i++) {
                String propName = parent + "." + properties[i];
                list.add(propName);
                list.addAll(Arrays.asList(getRecursiveChildrenProperties(element, propName)));
            }
            return list.toArray(new String[]{});
        }
    }
Returns all recursive children of the given parent property or an empty string array
if no children exist. The list of children is depth-first so the array is optimized
for easy displaying.

@param element the element to get the properties from
@param parent the parent property.
@return all recursive children of the given property in depth-first order or an empty
        string array if no children exist.
xmppserver/src/main/java/org/jivesoftware/util/ElementUtil.java