Pregunta

Al compilar el siguiente simpleType con la compilación XJC (del paquete 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>

Terminé con la siguiente enumeración en Java (se eliminaron declaraciones y comentarios de importación)

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

}

Esto es exactamente lo que quiero ... excepto el método public String value () . Esperaría que el método se llamara public String getValue () de acuerdo con las convenciones de nomenclatura de Sun. De esa manera puedo usarlo fácilmente en una página JSP usando EL. Ahora tengo que sortearlo.

¿Alguien tiene alguna experiencia en ajustar aún más la compilación XJC a una enumeración más útil con un método getValue () , en lugar de un método value () ? ¿O puedo agregar un método o algo?

P.S. Esto ocurrió en v2.0.3 de JAXB. Descargué la última versión v2.1.8 y es la misma que ...

¿Fue útil?

Solución

No hay nada en la especificación JAXB que parezca permitir este cambio. Creo que la única forma de hacerlo sería escribir un complemento JAXB.

Otros consejos

puede crear una pequeña variante de la clase generada que solo difiere de la generada para el nombre de este método. luego, en tiempo de ejecución, debes asegurarte de que tu variante esté cargada en lugar de la generada, jugando el juego de cargador de clases.

Por supuesto, esto solo puede funcionar si el XSD original no cambia a menudo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top