lundi 19 novembre 2012

Spécification JavaBean des trucs étranges

JavaBeans est une notion familière à tout développeur Java. A priori, il s'agit d'une classe, avec certaines propriétés et pour chacune de ces propriétés les méthodes getter et setter associées. Rien de bien compliqué donc.
Cependant, il arrive que nous ayant des surprise, et bien que les getter et setter aient été générés on découvre une erreur. Pourquoi lors l'exécution de l'application, celle-ci ne trouve pas un getter ou un setter d'une des propriété du bean ?

Et là on se rend compte que les spécifications JavaBean sont expliquées dans un petit document PDF de plus de 100 pages. Inévitablement, certaines des règles sont un peu bizarres et autant dire que rare sont les personnes qui ont regardée cette documentation.

Concrètement
Le nom des propriétés commence par une lettre minuscule au début du nom de la propriété, les méthodes JavaBean correspondantes (getter / setter) commences par get et set puis vient ensuite la première lettre en majuscule nom de la propriété.

Dans la plupart des cas cette règle est correcte.

Mais il arrive que l'on à traiter des noms des attributs non standard que certain problèmes se présentent. C'est typiquement le cas si votre code provient d'une génération automatisée de votre code.
Prenons un exemple, une chaîne provenant du C risque de vous produire l'attribut sName. Là, vous générez les méthodes getSName() et setSName(String nom).

Avec cet exemple, les framework tels que Struts, Hibernate, iBatis ou JSF ne seront pas résoudre l'accès à l'attribut sName.
En effet, dans un tel cas le getter et setter doivent avoir la forme suivante: getsName() et setsName(String nom).

Les propriétés et les règles d'accès

Type de la
propriété
Nom de la
propriété
getter setter
Doublexcoordinate public Double getXcoordinate() public void setXcoordinate(Double value)
DoublexCoordinate public Double getxCoordinate() public void setxCoordinate(Double value)
DoubleXCoordinate public Double getXCoordinate() public void setXCoordinate(Double value)
DoubleXcoordinateNon autoriséNon autorisé
Booleanstudent public Boolean getStudent() public void setStudent(Boolean value)
booleanstudent public boolean getStudent()
public boolean isStudent()
public void setStudent(boolean value)
Toto[]toto public Toto[] getToto()
public Toto getToto(int index)
public void setToto(Toto[] newArray)
public void setToto(int index, Toto item)

La Javadoc.

On peut s'inspirer de java.beans.Introspector, une classe permettant de récupérer la liste des propriétés présente sur une classe.

Method getter = new PropertyDescriptor(propertyName, beanClass).getReadMethod();

Voir également:

Aucun commentaire:

Enregistrer un commentaire