生成带有枚举值中的数字的大型枚举类JAXB, XJC



我试图使用XJC生成java类,我有以下问题:

我试图解析这个模式,这是一个大枚举类型(大于默认的typesafeEnumMaxMembers)。所以我使用以下绑定:

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    version="2.1">
   <!-- Raise theEnumMemberSizeCap limit -->
   <jxb:bindings >
       <jxb:globalBindings typesafeEnumMaxMembers="2000"/>
   </jxb:bindings>
</jxb:bindings>

然后用下面的行调用xjc:

C:Program FilesJavajdk1.7.0_17binxjc.exe -d C:Usersburiakout xmldAllDocuments_v02.1.xsd xml/binding.xjb

没有错误,只是:

parsing a schema...
compiling a schema...

然后结束,不创建任何东西。

较小的枚举类型可以很容易地以同样的方式解析,但是大一些的类型会被忽略,如果它们是其他类型的一部分,则会简单地变成字符串:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:include schemaLocation="dAllDocuments_v02.1.xsd"/>      
    <xs:complexType name="tDocument">
        <xs:annotation>
            <xs:documentation>Документ - описание</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="Code_Document" type="dAllDocuments">
                <xs:annotation>
                    <xs:documentation>Код документа</xs:documentation>
                </xs:annotation>
            </xs:element>
...............
public class TDocument {
@XmlElement(name = "Code_Document", required = true)
protected String codeDocument;
...............

使用JAXB或XmlBeans也会一无所获。

希望有人知道该怎么办。

编辑在浏览了很长一段时间没有找到答案后,我开始思考,这不是尺寸的问题。我是对的,结果我发现了这个-带有数值

的JAXB枚举

但是我要解析的XSD非常大:

<xs:simpleType name="dAllDocuments">
    <xs:restriction base="xs:string">
                <xs:enumeration value="008001000000"/>
                <xs:enumeration value="008001001000"/>
                <xs:enumeration value="008001002000"/>
                <xs:enumeration value="008001003000"/>
                <xs:enumeration value="008001004000"/>
                <xs:enumeration value="008001005000"/>
                <xs:enumeration value="008001006000"/>
                <xs:enumeration value="008001007000"/>
                <xs:enumeration value="008001008000"/>
                <xs:enumeration value="008001009000"/>
                <xs:enumeration value="008001010000"/>....

它会持续更长的时间。我绝对不可能用这样的方式把它们都写下来:

<jxb:bindings node="//xs:simpleType[@name='dAllDocuments']/xs:restriction/xs:enumeration[@value='008001000000']">
            <jxb:typesafeEnumMember name="OOBOOIOOOOOO"/>
        </jxb:bindings>

除了手动指定每个值的名称之外,还有其他方法可以使此工作吗?我的意思是,我可以创建一个程序用字符串来做这些东西,但是有什么聪明的方法吗?因为我解析的实际XSD连接到多个这样的ENUM XSD,我需要解析它们。

在花了更多的时间研究之后,我终于得到了我一直在等待的xjc的结果。

这是我使用的绑定文件,这样我就不会因为枚举类型太大而收到警告,这样所有大的枚举类型都会有一个生成的名称,比如VALUE_1, VALUE_2

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    version="2.1">
   <!-- Raise theEnumMemberSizeCap limit -->
   <jxb:bindings >
       <jxb:globalBindings typesafeEnumMaxMembers="2000" typesafeEnumMemberName="generateName"/>
   </jxb:bindings>
   <jxb:bindings schemaLocation="STD_Region_Cadastr.xsd">
       <jxb:bindings node="//xs:complexType[@name='tRight_Owner']">
           <jxb:class name="tRight_Owner2"/>
       </jxb:bindings>
   </jxb:bindings>
</jxb:bindings>

我还想提一下,因为我正在解析的XSD文件有很多西里尔字母,这里是我使用的xjc调用:

C:Program FilesJavajdk1.7.0_17bin>xjc.exe -b xml/binding.xjb -d C:Usersburiakout xmlSTD_Region_Cadastr.xsd -encoding UTF-8

这使得java文件中几乎每个西里尔字母入口都正确显示。

相关内容

  • 没有找到相关文章

最新更新