Question

Lors de la compilation du type simple suivant avec la compilation XJC (à partir du package JAXB) ...

<xs:simpleType name="test">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:typesafeEnumClass/>
        </xs:appinfo>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:appinfo>
            <jaxb:typesafeEnumMember name="FOUR"/>
          </xs:appinfo>
        </xs:annotation>
      </xs:enumeration>      
      <xs:enumeration value="6">
        <xs:annotation>
          <xs:appinfo>
            <jaxb:typesafeEnumMember name="SIX"/>
          </xs:appinfo>
        </xs:annotation>
      </xs:enumeration>
     </xs:restriction>
</xs:simpleType>

Je me retrouve avec l'énumération suivante en Java (instructions d'importation et commentaires supprimés)

@XmlEnum
public enum Test {

    @XmlEnumValue("4")
    FOUR("4"),
    @XmlEnumValue("6")
    SIX("6");
    private final String value;

    Test(String v) {
        value = v;
    }

    public String value() {
        return value;
    }

    public static Test fromValue(String v) {
        for (Test c: Test.values()) {
            if (c.value.equals(v)) {
                return c;
            }
        }
        throw new IllegalArgumentException(v.toString());
    }

}

C'est exactement ce que je veux ... sauf pour la méthode public String value () . Je m'attendrais à ce que la méthode s'appelle public String getValue () conformément aux conventions de dénomination de Sun. De cette façon, je peux facilement l'utiliser dans une page JSP en utilisant EL. Maintenant, je dois contourner le problème.

Quelqu'un at-il déjà une expérience dans la transformation de la compilation XJC en une énumération plus utile avec une méthode getValue () au lieu d'une méthode value () ? Ou puis-je ajouter une méthode ou quelque chose?

P.S. Cela s'est produit dans la version 2.0.3 de JAXB. J'ai téléchargé la dernière version 2.1.8 et c'est la même chose ici ...

Était-ce utile?

La solution

Rien dans la spécification JAXB ne semble autoriser ce changement. Je pense que la seule façon de faire cela serait d'écrire un plugin JAXB.

Autres conseils

vous pouvez créer une petite variante de la classe générée qui diffère seulement de celle générée pour le nom de cette méthode. ensuite, au moment de l'exécution, vous devez vous assurer que votre variante est chargée à la place de la version générée, en jouant au jeu de chargeur de classe.

Bien sûr, cela ne peut fonctionner que si la XSD d'origine ne change pas souvent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top