Frage

Wenn die folgende simple mit dem XJC kompilieren kompilieren (vom JAXB-Paket) ...

<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>

ich am Ende mit dem folgende Enum in Java (Import-Anweisungen und Anmerkungen können entfernt) bis

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

}

Das ist genau das, was ich will ... außer das public String value() Verfahren. Ich würde erwarten, dass die Methode von Sun Namenskonventionen aufgerufen wird public String getValue() nach. Auf diese Weise kann ich es einfach verwenden, in einer JSP-Seite mit EL. Jetzt habe ich um es auf meine Art zu arbeiten.

Hat jemand keine Erfahrung bei der Weiterentwicklung der XJC Kompilierung zu einer nützlicheren Aufzählung mit einem getValue() Verfahren zwicken, anstelle eine value() Methode? Oder kann ich eine Methode oder etwas hinzufügen?

P. S. Dies geschah in v2.0.3 von JAXB. Ich habe die neueste Version V2.1.8 und es ist das gleiche dort ...

War es hilfreich?

Lösung

Es gibt nichts in der JAXB spec, dass diese Änderung zu ermöglichen scheint. Ich denke, der einzige Weg, dies zu tun, wäre ein JAXB Plugin zu schreiben.

Andere Tipps

könnten Sie eine kleine Variante der generierten Klasse erstellen, die nur aus dem erzeugten eines für den Namen dieser Methode unterscheidet. dann zur Laufzeit, müssen Sie Ihre Variante stellen Sie sicher, wird anstelle des erzeugten ein, spielt das Spiel Classloader.

geladen

Natürlich kann dies nur Arbeit wird die ursprüngliche XSD nicht oft ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top