gpt4 book ai didi

java - 使用枚举值 JAXB、XJC 中的数字生成大枚举类

转载 作者:行者123 更新时间:2023-12-02 04:39:19 24 4
gpt4 key购买 nike

我正在尝试使用 XJC 生成 java 类,但遇到以下问题:

我正在尝试解析this schema这是一个大枚举类型(比默认的 typesafeEnumMaxMembers 更大)。所以我使用以下绑定(bind):

<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 enumeration with numeric values

但是我试图解析的 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 的结果。

这是我正在使用的绑定(bind)文件,这样我就不会收到有关枚举类型太大的警告,并且所有这些大枚举类型都会有一个生成的名称,例如 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 文件中。

就是这样。

关于java - 使用枚举值 JAXB、XJC 中的数字生成大枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30370456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com