Acesso a atributos privados com Jakarta BeanUtils

Olá,

já procurei de todo jeito e não consigo encontrar referências ao uso de Jakarta BeanUtils para acesso a atributos privados. Suspeito que não haja suporte a isto. Alguém sabe com certeza?

Obrigado,
Rodrigo

http://jakarta.apache.org/commons/beanutils/commons-beanutils-1.7.0/docs/api/org/apache/commons/beanutils/package-summary.html#standard.basic

Na documentação ele diz que é necessário haver o setter e/ou o getter. Se o atributo é privado ou não, não importa, porque ele não pega os atributos e sim chama os setters e/ou getters.

Typically, each bean property will have a public getter and setter method that are used to retrieve or define the property's value, respectively. The JavaBeans Specification defines a design pattern for these names, using get or set as the prefix for the property name with it's first character capitalized. Thus, you a JavaBean representing an employee might have (among others) properties named firstName, lastName, and hireDate, with method signatures like this: [code] public class Employee { public Employee(); // Zero-arguments constructor public String getFirstName(); public void setFirstName(String firstName); public String getLastName(); public void setLastName(String lastName); public Date getHireDate(); public void setHireDate(Date hireDate); public boolean isManager(); public void setManager(boolean manager); public String getFullName(); } [/code]

O BeanUtils não usa api de Reflection, mas sim a de Introspection, o que gera esse tipo de limitação.

Se você precisa mesmo fazer isso, pode usar Reflection mesmo:

Field field = klass.getDeclaredField( "myPrivateField" );
field.setAccessible( true );

Object value = field.get( myPopulatedObject );

Obrigado thingol e LIPE!

Quanto ao uso de setAcessible, já o utilizei em alguns pontos. O lance com BeanUtils era não reinventar a roda, mas não há jeito mesmo.

Valeu,
Rodrigo

Não precisa reinventar a roda :smiley:
http://www.koders.com/?s=ReflectionUtils&%3Abtn=Search&%3Ala=&_%3Ali=

De qualquer maneira, por que é que você tem de acessar um atributo privado (fora o fato de que você não está podendo mexer no código original , que é provavelmente a sua motivação? )
Se esse tipo de coisa está ocorrendo, há algo errado na arquitetura do sistema.