Achatando o Java Bean em um mapa

Estou preso em converterJava Bean paraMap. Existem muitos recursos na internet, mas infelizmente todos eles tratam da conversão de beans simples para o Maps. Os meus são um pouco mais extensos.

Há um exemplo simplificado:

public class MyBean {

  private String firstName;
  private String lastName;
  private MyHomeAddress homeAddress;
  private int age;

  // getters & setters

}

Meu objetivo é produzirMap<String, Object> que, neste caso, é verdadeiro para as seguintes condições:

map.containsKey("firstName")
map.containsKey("lastName")
map.containsKey("homeAddress.street")  // street is String
map.containsKey("homeAddress.number")  // number is int
map.containsKey("homeAddress.city")    // city is String
map.containsKey("homeAddress.zipcode") // zipcode is String
map.containsKey("age")

Eu tentei usarApache Commons BeanUtils. Ambas as abordagensBeanUtils#describe(Object) eBeanMap(Object) produzir um mapa cujo "nível profundo" seja 1 (quero dizer que há apenas"homeAddress" chave, segurandoMyHomeAddress objeto como um valor). Meu método deve inserir os objetos cada vez mais fundo, até encontrar um tipo primitivo (ou String), depois parar de cavar e inserir a chave, ou seja,"order.customer.contactInfo.home".

Então, minha pergunta é: como isso pode ser feito com facilidade (ou já existe um projeto que me permita fazer isso)?

atualizar

Eu ampliei a resposta do Radiodef para incluir também Coleções, Matrizes de Mapas e Enums:

private static boolean isValue(Object value) {
  final Class<?> clazz = value.getClass();
  if (value == null ||
      valueClasses.contains(clazz) ||
      Collection.class.isAssignableFrom(clazz) ||
      Map.class.isAssignableFrom(clazz) ||
      value.getClass().isArray() ||
      value.getClass().isEnum()) {
    return true;
  }
  return false;
}

questionAnswers(2)

yourAnswerToTheQuestion