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
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
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
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.