2016-09-09 1 views
0

Вот вопрос, наш контракт - XSD-файл. В последнее время мы хотим, чтобы он поддерживал Json. Но есть какая-то сложная проблема, которую мы должны решить. Когда я определяю XSD так:
Как настроить имя и имя поля, созданного xjc?

<xs:simpleType name="SomeType"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="SomeSelfDefineType" /> 
    </xs:restriction> 
</xs:simpleType> 

сгенерированный код выглядит так:

@XmlType(name = "SomeType") 
@XmlEnum 
public enum SomeType { 
    @XmlEnumValue("SomeSelfDefineType") 
    SOME_SELF_DEFINE_TYPE("SomeSelfDefineType") 
} 

При использовании XML, это хорошо, потому что он читает данные аннотаций, но когда мы используем Json, SomeSelfDefineType будет переведен на номер SOME_SELF_DEFINE_TYPE. Зарегистрируйте много пользовательских Gson serializable/deserializable Interface, чтобы решить эту проблему, это не очень хороший вариант для меня.

Я проверил ответы других о том, как настраивать какое-то имя поля или перечисления, но у меня действительно много определений перечислений. Есть ли плагин или решения для меня, чтобы сгенерировать код вроде этого:

@XmlType(name = "SomeType") 
@XmlEnum 
public enum SomeType { 
    @XmlEnumValue("SomeSelfDefineType") 
    SomeSelfDefineType("SomeSelfDefineType") 
} 

Я не знаком с JAXB или его плагинов, может кто-нибудь дать мне некоторые параметры xjb или плагин для меня, чтобы сохранить эту проблему?

ответ

0

Вы можете переопределить значения enum, используя .xjb, как показано ниже.

<?xml version="1.0"?> 
    <jxb:bindings version="2.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"  jxb:extensionBindingPrefixes="xjc"> 

     <jxb:bindings schemaLocation="yours.xsd"> 
      <jxb:bindings 
       node="//xs:simpleType[@name='SomeType']/xs:restriction/xs:enumeration[@value='SomeSelfDefineType']"> 
       <jxb:typesafeEnumMember name="SomeSelfDefineType" /> 
      </jxb:bindings> 
     </jxb:bindings> 

    </jxb:bindings> 
+0

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