Использование JAXB для настройки генерации java-перечислений - PullRequest
3 голосов
/ 17 ноября 2011

Я использую файл внешних привязок при использовании jaxb против схемы XML.

В основном я использую файл привязок для сопоставления примитивов схемы XML с моими собственными типами.

Это фрагмент файла привязок

   <jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ai="http://java.sun.com/xml/ns/jaxb/xjc" extensionBindingPrefixes="ai">
        <jxb:bindings schemaLocation="xsdurl" node="xs:schema">
             <jxb:globalBindings>
                 <jxb:javaType name="com.companyname.StringType" xmlType="xs:string"  
              parseMethod="parse" printMethod="print" hasNsContext="true">
                 </jxb:javaType>
             </jxb:globalBindings>
        </jxb:bindings>
    </jxb:bindings>

Таким образом, всякий раз, когда встречается xs:string, com.companyname.StringType методы print / parse вызываются для маршалинга / демаршаллинга и т. Д.

Теперь, если JAXB встретит xs:enumeration, он сгенерирует Java enum.

Например:

<xs:simpleType name="Address">
    <xs:restriction base="xs:string">
        <xs:enumeration value="ADDR"/>
        <xs:enumeration value="PBOX"/>
    </xs:restriction>
</xs:simpleType>

    public enum Address
    {

        ADDR,
        PBOX,

        public String value() {
           return name();
        }

        public static Address fromValue(String v) {
          return valueOf(v);
        }
     }

Кто-нибудь знает, можно ли настроить создание enum как для примитива? Я хотел бы иметь возможность:

  1. Добавить стандартную переменную-член / другие методы к каждому перечислению, сгенерированному jaxb.

  2. Укажите статический метод, используемый для создания enum.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...