从深层嵌套的xsd元素生成枚举

时间:2017-12-19 12:37:48

标签: java enums xsd jaxb

我遇到了从深层嵌套的xsd元素生成枚举的问题。当我在maven构建期间生成代码时,我的枚举是string类型。这是一个例子。

TextBox

从上面的例子中我们将在Car元素中包含另外20个元素,其中包含枚举值名称“Type”。我有一个绑定文件绑定'类型'到jaxb:typesafeEnumClass但它不工作,我仍然得到字符串作为我的枚举类型。这是我绑定的一个例子。

 <xs:element name="Car">
 <xs:complexType>
  <xs:sequence>
     <xs:element name="CarModal">
        <xs:complexType>
         <xs:sequence>
             <xs:element name="Type">
               <xs:simpleType>
                  <xs:restriction base="xs:string">
                     <xs:enumeration value="SomeValue"/>
                     <xs:enumeration value="AnotherValue"/>
                  </xs:restriction>
               </xs:simpleType>
             </xs:element>
         </xs:sequence>
        </xs:completType>
     </xs:element>
  </xs:sequence>

感谢您的帮助,我无法更改xsd

1 个答案:

答案 0 :(得分:0)

我猜你的绑定还不够精确。当您编写 public class BLA { [Key] public int IDin { get; set; } public int actual { get; set; } public string code { get; set; } public DateTime Date { get; set; } } 时,您基本上会说“我的架构中的任何//xs:element[@name='CarModal']元素”。接下来,您说您有许多CarModal元素,因此Type不够精确。

尝试更精确的表达式,例如

xs:element[@name='Type']/xs:simpleType

接下来,您的绑定会对错误的语法产生一般印象。例如:

xs:complexType/xs:sequence/xs:element[@name='CarModal']/
xs:complexType/xs:sequence/xs:element[@name='Type']/xs:simpleType

是无效的XML(在<jaxb:bindings node="xs:element[@name='Type']/xs:simpleType> 之后缺少")。因此可能会出现根本不考虑绑定的情况 - 否则您应该得到错误而不是生成的代码。仔细检查是否应用了绑定。