@Override
    @SuppressWarnings("unchecked")
    public void read(JmeImporter im) throws IOException {
        InputCapsule input = im.getCapsule(this);

        Savable[] jointRootsAsSavable = input.readSavableArray("rootJoints", null);
        rootJoints = new Joint[jointRootsAsSavable.length];
        System.arraycopy(jointRootsAsSavable, 0, rootJoints, 0, jointRootsAsSavable.length);

        Savable[] jointListAsSavable = input.readSavableArray("jointList", null);
        jointList = new Joint[jointListAsSavable.length];
        System.arraycopy(jointListAsSavable, 0, jointList, 0, jointListAsSavable.length);

        String className = input.readString("modelTransformClass", MatrixJointModelTransform.class.getCanonicalName());
        try {
            modelTransformClass = (Class<? extends JointModelTransform>) Class.forName(className);
        } catch (ClassNotFoundException e) {
            throw new AssetLoadException("Cannot find class for name " + className);
        }

        int i = 0;
        for (Joint joint : jointList) {
            joint.setId(i++);
            instantiateJointModelTransform(joint);
        }
        createSkinningMatrices();

        for (Joint rootJoint : rootJoints) {
            rootJoint.update();
        }
        applyInitialPose();
    }
De-serialize this Armature from the specified importer, for example when
loading from a J3O file.

@param im the importer to read from (not null)
@throws IOException from the importer
jme3-core/src/main/java/com/jme3/anim/Armature.java