我有以下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>
编辑:我还有以下全局绑定:
<?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
,因此我将绑定文件更改为:
<?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
上的绑定,XJC现在会按预期创建一个CG
类,但它会错过@XmlRootElement
注释。我已在element
和complexType
上尝试了各种绑定组合,但无法简单地重命名默认生成的类。
如何一次重命名element
和complexType
?
答案 0 :(得分:0)
element
和complexType
都是他们自己的java类。如果不使用绑定文件,您应该获得2个类文件的结果:Cg.java
和CgType.java
。在您的绑定中,您尝试将这两个重命名为CG.java
,这当然是不可能的。
您可能正在寻找的是将complexType
重命名为CGType
,在这种情况下,您的绑定应为:
...
<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>
...