public void writeExternal(Object o, ObjectOutput out)
        throws IOException, IllegalAccessException {

        String instanciatorType = null; //TODO getInstanciator(o.getClass().getName());
        if (instanciatorType != null) {
            try {
                AbstractInstanciator<?> instanciator =
                    (AbstractInstanciator<?>) ClassUtil.newInstance(instanciatorType);
                for (String fieldName : instanciator.getOrderedFieldNames()) {
                    Field field = o.getClass().getDeclaredField(fieldName);
                    field.setAccessible(true);
                    Object value = field.get(o);
                    if (value instanceof Map)
                        value = BasicMap.newInstance((Map<?, ?>) value);
                    out.writeObject(value);
                }
            } catch (Exception e) {
                throw new RuntimeException("", e);
            }
        } else {
            List<Field> fields = findOrderedFields(o.getClass());
            for (Field field : fields) {
                field.setAccessible(true);
                out.writeObject(field.get(o));
            }
        }
    }