我正在使用JAXB和intellij webservices插件从XSD创建java文件。我有两个定义相同对象的XSD,但是当我使用“从XML模式生成java代码”创建它们时,该对象使用自己的包创建两次。我已经尝试使用import xsd并使用ref属性,我得到了相同的结果。
以下是一个例子:
这是第一个XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.msp-gs.com/workflow"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:wc="http://www.example.com/workflow"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
jaxb:version="1.0">
<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings enableJavaNamingConventions="true">
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="WC">
<xs:complexType>
<xs:sequence>
<xs:element name="Example"
type="wc:Restriction"
minOccurs="1"
maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Restriction">
<xs:attribute type="xs:string"
name="authorizationTreeId"/>
</xs:complexType>
</xs:schema>
这是第二个XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.msp-gs.com/workflow"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:fd="http://www.example.com/workflow"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
jaxb:version="1.0">
<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings enableJavaNamingConventions="true">
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="FD">
<xs:complexType>
<xs:sequence>
<xs:element name="Example"
type="fd:Restriction"
minOccurs="1"
maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Restriction">
<xs:attribute type="xs:string"
name="authorizationTreeId"/>
</xs:complexType>
</xs:schema>
我希望限制将是同一个对象。
谢谢。
答案 0 :(得分:3)
您可以告诉JAXB使用现有Java类,而不是使用如下所示的外部绑定文件生成Java类。在下面的示例中,我们告诉JAXB使用现有的Product
类:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<bindings version="2.1" xmlns="http://java.sun.com/xml/ns/jaxb">
<bindings scd="x-schema::tns"
xmlns:tns="http://www.example.org/Product">
<schemaBindings map="false"/>
<bindings scd="tns:product">
<class ref="org.example.product.Product"/>
</bindings>
</bindings>
</bindings>
如果您使用XJC工具从XML模式生成类,则可以使用-episode
标志让XJC生成指向其生成的所有类的绑定文件。这将允许您重用以前生成的类。
xjc -d out -episode product.episode Product.xsd
了解更多信息