2016-05-17 66 views
1

我有一个包含类似如下结构的几个XSD文件:XJC不会产生内部XS枚举:工会

<xs:complexType name="SomeThing" abstract="false"> 
    <xs:sequence> 
     <xs:element name="id" type="schema2:SomeIdTypeClass" minOccurs="1" maxOccurs="1"/> 
     <xs:element name="myType" type="schema1:MyType" minOccurs="1" maxOccurs="1"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:simpleType name="MyType"> 
    <xs:union> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
        <xs:enumeration value="APPLE"/> 
        <xs:enumeration value="ORANGE"/> 
        <xs:enumeration value="BANANA"/> 
       </xs:restriction> 
      </xs:simpleType> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
       <xs:pattern value="OTHER:[a-zA-Z_][a-zA-Z0-9_]*"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:union> 
</xs:simpleType> 

我使用XJC命令来生成控制台上的Java类,而不是Maven的或蚂蚁或任何其他构建工具。

除了这些类型的枚举之外,所有的类似乎都可以很好地生成。使用枚举类型的类只将其引用为String,例如。 Something类包含MyType只作为一个字符串,而不是作为一个ENUM,因为我期望它。

在另一个文件中,我有类似这样的东西,其中Enums生成没有问题,并且引用类将它用作Enums。

<xs:simpleType name="SizeType"> 
<xs:restriction base="xs:string"> 
     <xs:enumeration value="SMALL"/> 
     <xs:enumeration value="MEDIUM"/> 
     <xs:enumeration value="LARGE"/> 
</xs:restriction> 

我不想交替XSD文件,因为它们不是由自己产生的,我有很多这些元素的一些文件。

我来,我需要使用某种XJB绑定文件的结论,但我想不通,到底我需要在里面写了什么:太

下面给我只有错误”的结果许多目标节点”

<jaxb:bindings version="2.0" xmlns:jaxb="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" 
jaxb:extensionBindingPrefixes="xjc"> 
    <jaxb:bindings schemaLocation="MySchema.xsd" node="/xs:schema"> 
     <jaxb:bindings node="//xs:simpleType[@name='MyType']/xs:union/xs:simpleType"> 
      <jaxb:typesafeEnumClass name="MyType"/> 
     </jaxb:bindings>  
    </jaxb:bindings> 
</jaxb:bindings> 

添加多个=‘真’解决了,但仍然不给我我想要的枚举。

编辑: 当我删除的xs:工会,让我有一个正常的xs:简单类型是这样的:

<xs:simpleType name="MyType"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="OTHER:[a-zA-Z_][a-zA-Z0-9_]*"/> 
    <xs:enumeration value="APPLE"/> 
    <xs:enumeration value="ORANGE"/> 
    <xs:enumeration value="BANANA"/> 
    </xs:restriction>    
</xs:simpleType> 

然后,它按预期工作。如果我不需要,我仍然不想沿着这条路线走下去,编辑模式。必须有一些解决办法。

回答

0

您需要使用以下绑定。

<jaxb:bindings version="2.0" xmlns:jaxb="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" 
jaxb:extensionBindingPrefixes="xjc"> 
<jaxb:bindings schemaLocation="MySchema.xsd" node="/xs:schema"> 
<jxb:bindings node="//xs:element[@name='MyType']"> 
      <jxb:property > 
       <jxb:baseType name="java.lang.String"></jxb:baseType> 
      </jxb:property> 
     </jxb:bindings> 
     </jxb:bindings>