JAXB - XJC - влияние на сгенерированный тип и безопасный тип enum - PullRequest
1 голос
/ 20 октября 2008

При компиляции следующего simpleType с компиляцией XJC (из пакета 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>

Я получаю следующее перечисление в Java (операторы импорта и комментарии удалены)

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

}

Это именно то, что я хочу ... за исключением метода public String value(). Я ожидаю, что метод будет вызываться public String getValue() в соответствии с соглашениями об именах Sun. Таким образом, я могу легко использовать его на JSP-странице, используя EL. Теперь я должен обойти это.

Кто-нибудь имеет опыт дальнейшей настройки компиляции XJC для более полезного перечисления с помощью метода getValue() вместо value()? Или я могу добавить метод или что-то?

P.S. Это произошло в версии 2.0.3 JAXB. Я скачал последнюю версию v2.1.8 и там тоже самое ...

Ответы [ 2 ]

1 голос
/ 28 октября 2008

В спецификации JAXB нет ничего, что могло бы позволить это изменение. Я думаю, что единственный способ сделать это - написать плагин JAXB.

0 голосов
/ 07 апреля 2012

вы можете создать небольшой вариант сгенерированного класса, который отличается от сгенерированного только именем этого метода. затем во время выполнения вы должны убедиться, что ваш вариант загружен вместо сгенерированного, играя в игру загрузчика классов.

Конечно, это может работать только в том случае, если оригинальный XSD меняется не часто.

...