簡體   English   中英

用枚舉值中的數字生成大型枚舉類JAXB,XJC

[英]Generating big enum classes with numbers in enum values 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 Files\Java\jdk1.7.0_17\bin\xjc.exe -d C:\Users\buriak\out xml\dAllDocuments_v02.1.xsd xml/binding.xjb

這沒有錯誤,只是:

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

然后結束而不創建任何東西。

較小的枚舉類型很容易以相同的方式進行解析,但是較大的枚舉類型將被忽略,如果它們是其他xsd的其他類型的一部分-它們將簡單地變成字符串:

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

除了手動為每個值指定名稱之外,還有什么方法可以使這項工作有效? 我的意思是我可以創建一個程序來使用Strings進行此類操作,但是有什么聰明的方法嗎? 因為我要解析的實際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 Files\Java\jdk1.7.0_17\bin>xjc.exe -b xml/binding.xjb -d C:\Users\buriak\out xml\STD_Region_Cadastr.xsd -encoding UTF-8

這使得幾乎所有西里爾字母輸入都能正確顯示在Java文件中。

而已。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM