Domanda

Quando si compila il seguente simpleType con la compilazione XJC (dal pacchetto 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>

Finisco con il seguente enum in Java (dichiarazioni di importazione e commenti rimossi)

@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());
    }

}

Questo è esattamente quello che voglio ... ad eccezione del metodo valore String pubblico () . Mi aspetto che il metodo venga chiamato public String getValue () secondo le convenzioni di denominazione di Sun. In questo modo posso facilmente usarlo in una pagina JSP usando EL. Ora devo aggirare il problema.

Qualcuno ha qualche esperienza nel perfezionare ulteriormente la compilazione XJC in una enumerazione più utile con un metodo getValue () , anziché un metodo value () ? O posso aggiungere un metodo o qualcosa del genere?

P.S. Ciò si è verificato nella v2.0.3 di JAXB. Ho scaricato l'ultima versione v2.1.8 ed è la stessa lì ...

È stato utile?

Soluzione

Non c'è nulla nelle specifiche JAXB che sembra consentire questa modifica. Penso che l'unico modo per farlo sarebbe scrivere un plugin JAXB.

Altri suggerimenti

potresti creare una piccola variante della classe generata che differisce solo da quella generata per il nome di questo metodo. quindi in fase di esecuzione, devi assicurarti che la tua variante sia caricata anziché quella generata, giocando al gioco classloader.

Ovviamente, questo può funzionare solo se l'XSD originale non cambia spesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top