Popular beans com BeanUtils.populate

Caros,

Estou usando o Apache Commons Bean Utils para popular os atributos de um objeto.

Até agora eu fazia o simples, populava um Map com os valores e usava o populate para popular os valores dos atributos do objeto.

Map<String, Object> dados = new HashMap<String, Object>(); dados.put( "atributoA", "algum valor" ); dados.put( "atributoB", 666 ); MeuObj obj = new MeuObj(); BeanUtils.populate( obj, dados );

Porém agora eu quero popular os atributos de objetos relacionados ao meu objeto. Explico. A classe MeuObj tem um atributo do tipo OutroObj, e quero popular um atributo de OutroObj, relacionado com MeuObj. Exatamente como se faz no Struts, quando você coloca o property “meuObj.outroObj.atributoX”, por trás dos panos ele faz um “meuObj.getOutroObj().setAtributoX(…)”.

Porém , vi que o BeanUtils.populate() não trabalha assim.

Alguém conhece alguma solução pronta?

Solução adhoc:

[code] private static void setValue( Object obj, Object value, String attribute ) throws Exception {
obj = getObjectToSetValueToAttribute( obj, name );
String attribute = getLastPropertyNameOnly(name);
BeanUtils.setProperty(obj, attribute, value);
}

private static Object getObjectToSetValueToAttribute(Object obj, String name) {
if( name.indexOf(’.’) < 0 ) {
return obj;
}
name = getNestedObjectHierarchyWithoutAttribute(name);
try {
obj = PropertyUtils.getNestedProperty(obj, name);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return obj;
}

private static String getNestedObjectHierarchyWithoutAttribute( String name ) {
if( name.indexOf(’.’) < 0 ) {
return name;
}
return name.substring(0,name.lastIndexOf(’.’));
}[/code]

Funcionou aqui, por enquanto.