2008-10-20 7 views
1

Lors de la compilation du simpleType suivant la XJC compilation (du paquet JAXB) ...JAXB - XJC - Influencer générée classe typesafe enum et les membres

<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'ENUM suivante en Java (import déclarations 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 soit appelée public String getValue() selon les conventions de nommage de Sun. De cette façon, je peux facilement l'utiliser dans une page JSP en utilisant EL. Maintenant, je dois travailler mon chemin autour d'elle.

Quelqu'un a-t-il une expérience dans la peaufinage de la compilation XJC pour 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 v2.1.8 et c'est la même chose ici ...

Répondre

1

Il n'y a rien dans la spécification JAXB qui semble permettre ce changement. Je pense que la seule façon de le faire serait d'écrire un plugin JAXB.

+0

Merci de penser à philvarner ... Actuellement, j'ai travaillé mon chemin autour de cela. Je l'ai également posté sur le forum de JAXB (http://forums.java.net/jive/message.jspa?messageID=310818), mais pas de réponse non plus ... nous verrons. À mon humble avis, c'est la génération de code défectueux. Je vous ferai savoir si le plugin JAXB a fonctionné. –

+0

@Johan, quelle était la solution de contournement? –

0

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. Au moment de l'exécution, vous devez vous assurer que votre variante est chargée à la place de celle générée, en jouant au jeu du chargeur de classe.

Bien sûr, cela ne fonctionne que si le XSD d'origine ne change pas souvent.

Questions connexes