Iterar Atributos com Reflection em Java

Fala pessoal, estou tentando iterar sobre os atributos de um objeto usando reflection e recursão mas estou com dificuldade.

Quando um Objeto A tem um atributo que é outro Objeto B, preciso entrar dentro desse objeto B e depois voltar para o Objeto A e continuar iterando sobre os outros atributos. alguém tem alguma dica?

public class Main {

public static void main(String[] args) {

    Endereco endereco = new Endereco(1, "Avenida Brasil", 147, "Centro");
    Telefone telefone = new Telefone("123456789", 51);
    Mypojo cliente = new Mypojo(1, "José da Silva", telefone, new Date(), endereco);

    Class<?> classe = cliente.getClass();
    Field[] campos = classe.getDeclaredFields();

    try {
        ValidateNullFields.imprimeAtributoseValoresPojo(cliente, campos, 0);
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

}

public class ValidateNullFields {

public static Field[] imprimeAtributoseValoresPojo(Object object, Field[] campos, int i) throws IllegalAccessException {

    if (i < campos.length) {
        campos[i].setAccessible(true);

        System.out.println(campos[i].getName() + ": " + campos[i].get(object));

        if (campos[i].getType().toString().contains("model")) {

            return imprimeAtributoseValoresPojo(campos[i].get(object), campos[i].getType().getDeclaredFields(), 0);

        }
        return imprimeAtributoseValoresPojo(object, campos, i = i + 1);

    }

    return null;
}

}

Já consegui, o return que tava me quebrando.

public static void imprimeAtributoseValoresPojo(Object object, Field[] campos, int i) throws IllegalAccessException {


    if (i < campos.length) {
        campos[i].setAccessible(true);

        System.out.println(campos[i].getName() + ": " + campos[i].get(object));

        if (campos[i].getType().toString().contains("model")) {

            imprimeAtributoseValoresPojo(campos[i].get(object), campos[i].getType().getDeclaredFields(), 0);

        }
        imprimeAtributoseValoresPojo(object, campos,i + 1);
    }
}