2008-10-20 6 views
1

При составлении следующей simpleType с XJC компилировать (из пакета JAXB) ...JAXB - XJC - влияющий на генерироваться типизированный класс и перечисления члены

<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, и это то же самое ...

ответ

1

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

+0

Спасибо за то, что подумал о филармоне ... В настоящее время я работал над этим. Я также разместил его на форуме JAXB (http://forums.java.net/jive/message.jspa?messageID=310818), но ответа там тоже не будет ... посмотрим. ИМХО это порочное генерирование кода. Я дам вам знать, работает ли плагин JAXB. – 2008-11-08 10:02:16

0

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

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