gpt4 book ai didi

java - JAXB XJC 绑定(bind) : renaming @XmlRootElement and @XmlType together

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:28 24 4
gpt4 key购买 nike

我有以下 XML 架构:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="cg" type="cgType"/>

<xsd:complexType name="cgType">
<xsd:sequence>
<xsd:element name="code" type="upperCaseString" minOccurs="1" maxOccurs="1"/>
<xsd:element name="action" type="cgAction" minOccurs="1" maxOccurs="1"/>
<xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="param" type="xsd:string" minOccurs="0" maxOccurs="unbounded" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="automated" type="xsd:boolean" default="false" use="optional"/>
</xsd:complexType>

<xsd:simpleType name="cgAction">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="TAKE"/>
<xsd:enumeration value="CLEAR"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="upperCaseString">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Z]*"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

编辑:我还有以下全局绑定(bind):

<?xml version="1.0" encoding="UTF-8" ?>
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:version="2.1">

<jaxb:bindings schemaLocation="cg.xsd" node="/xsd:schema">
<jaxb:globalBindings>
<xjc:simple/>
</jaxb:globalBindings>
</jaxb:bindings>
</jaxb:bindings>

使用 XJC 生成类可以按预期工作,名为 Cg 的类同时具有 @XmlType@XmlRootElement 注释。我想将该类重命名为 CG,因此我将绑定(bind)文件更改为:

<?xml version="1.0" encoding="UTF-8" ?>
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:version="2.1">

<jaxb:bindings schemaLocation="cg.xsd" node="/xsd:schema">
<jaxb:schemaBindings>
<jaxb:package name="foo.bar.cg"/>
</jaxb:schemaBindings>

<jaxb:bindings node="//xsd:element[@name='cg']">
<jaxb:class name="CG"/>
</jaxb:bindings>
<jaxb:bindings node="//xsd:complexType[@name='cgType']">
<jaxb:class name="CG"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>

这会导致 XJC 提示两个 CG 类之间的 ObjectFactory 类发生冲突。如果我删除 xsd:element 上的绑定(bind),XJC 现在将按预期创建一个 CG 类,但它会丢失 @XmlRootElement 注释。我已经在 elementcomplexType 上尝试了各种绑定(bind)组合,但无法简单地重命名默认生成的类。

如何同时重命名 elementcomplexType

最佳答案

elementcomplexType 都是它们自己的 java 类。不使用绑定(bind)文件,您应该获得 2 个类文件的结果:Cg.javaCgType.java。在您的绑定(bind)中,您尝试将这两个重命名为 CG.java ,这当然是不可能的。

您可能正在寻找的是将 complexType 重命名为 CGType 在这种情况下,您的绑定(bind)应为:

...
<jaxb:bindings node="//xsd:element[@name='cg']">
<jaxb:class name="CG"/>
</jaxb:bindings>
<jaxb:bindings node="//xsd:complexType[@name='cgType']">
<jaxb:class name="CGType"/>
</jaxb:bindings>
...

关于java - JAXB XJC 绑定(bind) : renaming @XmlRootElement and @XmlType together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36694524/

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