@Override
    @SuppressWarnings("unchecked")
    public ArrayList<Savable>[][] readSavableArrayListArray2D(String name, ArrayList[][] defVal) throws IOException {
        Element outerArrayElement = findChildElement(name);

        if (outerArrayElement == null) {
            return defVal;
        }

        List<Element> innerArrayElements = getObjectArrayElements(outerArrayElement);

        ArrayList<Savable>[][] savableArrayListArray2D = new ArrayList[innerArrayElements.size()][];

        Element old = currentElement;
        currentElement = outerArrayElement;

        for (int i = 0; i < innerArrayElements.size(); i++) {
            if (innerArrayElements.get(i) != null) {

                savableArrayListArray2D[i] = readSavableArrayListArray(innerArrayElements.get(i).getTagName(), null);
            }
        }

        currentElement = old;

        return savableArrayListArray2D;
    }
Part of the jME XML IO system as introduced in the Google Code jmexml project.

@author Kai Rabien (hevee) - original author of the code.google.com jmexml project
@author Doug Daniels (dougnukem) - adjustments for jME 2.0 and Java 1.5
@author blaine
jme3-plugins/src/xml/java/com/jme3/export/xml/DOMInputCapsule.java