private static void dumpProperties( String indent, Object o, String... skip ) {
        if( o == null ) {
            return;
        }
        Set<String> skipSet = new HashSet<>(Arrays.asList(skip));
        for( Method m : o.getClass().getMethods() ) {
            if( m.getParameterTypes().length > 0 ) {
                continue;
            }
            String name = m.getName();
            if( "getClass".equals(name) ) {
                continue;
            }
            if( !name.startsWith("get") ) {
                continue;
            }
            Class type = m.getReturnType();
            if( type.isPrimitive() || type.isEnum() ) {
                continue;
            }
            name = name.substring(3);
            if( skipSet.contains(name.toLowerCase()) ) {
                continue;
            }
            try {
                Object value = m.invoke(o);
                System.out.println(indent + name + ":" + objectToString(value));
            } catch( Exception e ) {
                throw new RuntimeException("Error with method:" + m, e);
            }
        }
    }
Debug dump to check structure and identity
jme3-examples/src/main/java/jme3test/app/TestCloneSpatial.java