Problemas com reflexão em JAVA

Bom dia. Eu estou pegando os valores dos campos de uma classe por reflexão. Estou recebendo o objeto por parâmetro, mas quando eu vou mostrar o valor que peguei, ele vem em branco. Estou conseguindo pegar o atributo, mas não o valor. Pelo que eu percebi, parece que ele não está pegando a instância do objeto que foi passado. Agradeço a ajuda que vinher.

public static void transformarCamposCaixaAlta(BaseModel bm) {
        Class<?> classe = bm.getClass();
        for(Field item : classe.getDeclaredFields()) {
            item.setAccessible(true);

            if (item.getType() == BaseModel.class) {
                try {
                    transformarCamposCaixaAlta((BaseModel) item.get(bm));
                } catch (IllegalArgumentException | IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (item.isAnnotationPresent(FieldUpperCase.class)) {
                try {
                    if(item.get(bm) != null) {

                        System.out.println("Valor: "+ item.get(bm).toString() + " Tipo: "+ item.getName());
                        System.out.println("------");
                        item.set(bm, ((String)item.get(bm)).toUpperCase());
                    }
                } catch (IllegalArgumentException | IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
    }

Ajuda que “vinher”? Risos! O certo seria “vier”…

Vamos lá, terias como postar o código da sua classe BaseModel e o código onde você chama o transformarCamposCaixaAlta passando o objeto BaseModel como parâmetro?

Vlw ai pela correção staroski. hehehe.
A classe BaseModel é uma super classe, que todos os meus modelos herdam dela. Eu chamo o método transformarCamposCaixaAlta no GenericDao, antes de salvar o modelo. Deu pra entender? Se quiser eu posto as classes aqui, mas como eu disse a BaseModel é uma super classe que só tem os parâmetros comuns de todos, como dataRegistro. Obrigado pela ajuda.

O problema é que você só está listando somente os atributos das subclasses, e não da superclasse.

Tenta assim:

public static void transformarCamposCaixaAlta(BaseModel objeto) {
	Class<?> classe = objeto.getClass();
	while (BaseModel.class.isAssignableFrom(classe)) {
		for (Field atributo : classe.getDeclaredFields()) {
			try {
				Class<?> tipo = atributo.getType();
				atributo.setAccessible(true);
				Object valor = atributo.get(objeto);
				if (valor == null) {
					continue;
				}
				if (BaseModel.class.isAssignableFrom(tipo)) {
					transformarCamposCaixaAlta((BaseModel) valor);
					continue;
				}
				if (String.class.isAssignableFrom(tipo) && atributo.isAnnotationPresent(FieldUpperCase.class)) {
					System.out.println("Atributo: " + atributo.getName());
					System.out.println("Tipo:     " + tipo.getSimpleName());
					System.out.println("Valor:    " + String.valueOf(valor));
					System.out.println("----");
					atributo.set(objeto, ((String) valor).toUpperCase());
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		classe = classe.getSuperclass();
	}
}

Obrigado pela ajuda @staroski , era exatamente este problema. Fiz mais ou menos como vc descreveu ai, utilizei o instanceof. Obrigado pela ajuda.