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

问题描述 投票:0回答:1

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

 <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>

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

<jaxb:bindings schemaLocation="someLocation">
   <jaxb:bindings node="//xs:element[@name='Car']>
      <jaxb:bindings node="//xs:element[@name='CarModal']">
         <jaxb:bindings node="xs:element[@name='Type']/xs:simpleType>
            <jaxb:typesafeEnumClass name="Type"/>
         </jaxb:bindings>
      </jaxb:bindings>
   </jaxb:bindings>
</jaxb:bindings>

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

java enums xsd jaxb
1个回答
0
投票

我猜你的绑定也不够精确。当你写//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

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

<jaxb:bindings node="xs:element[@name='Type']/xs:simpleType>

是无效的XML(在"之后缺少xs:simpleType)。因此可能会出现根本不考虑绑定的情况 - 否则您应该得到错误而不是生成的代码。仔细检查是否完全应用了绑定。

© www.soinside.com 2019 - 2024. All rights reserved.