Pergunta

Ao compilar o seguinte simpleType com a compilação XJC (do pacote 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>

eu acabar com o seguinte enum em Java (declarações de importação e comentários removidos)

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

}

Este é exatamente o que eu quero ... exceto para o método public String value(). Espero que o método a ser chamado public String getValue() de acordo com as convenções de nomenclatura da Sun. Dessa forma eu posso facilmente usá-lo em um JSP-página usando EL. Agora eu tenho que trabalhar o meu caminho em torno dele.

Alguém tem alguma experiência em mais ajustes a compilação XJC a uma enumeração mais útil com um método getValue(), em vez de um método value()? Ou eu posso adicionar um método ou algo assim?

P.S. Isto ocorreu em v2.0.3 de JAXB. Eu baixei a versão mais recente v2.1.8 e é o mesmo lá ...

Foi útil?

Solução

Não há nada na especificação JAXB que parece permitir esta mudança. Acho que a única maneira de fazer isso seria escrever um JAXB Plugin.

Outras dicas

Você pode criar uma pequena variante da classe gerada que apenas difere o gerado para o nome do método. em seguida, em tempo de execução, você tem que se certificar que seu variante é carregado em vez do gerado, o jogo carregador de classe.

Claro, isso só pode trabalho é o XSD original não mudar frequentemente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top