Castor可以处理从基础XSD导入的多个XSD生成类吗?

Sle*_*led 3 java xml ant castor jaxb

我有几个重用相同实体的XSD.例如,既为中的XSD ProductPurchaseRequest.xsdProductQuoteRequest.xsd都有一个<product>在他们的标签来描述产品的问题.出于这个原因,我创建了一个Product.xsd文件来定义 <product>标签和两者,ProductPurchaseRequest.xsd并用` ProductQuoteRequest.xsd导入Product.xsd.

我想使用Castor从这些XSD生成Java类,并且它们都使用相同的类来表示,Product以便我可以重用相同的逻辑将它们映射到我们的模型ProductModel类.

Castor可以这样做吗?如果是这样,它的Ant任务语法是什么.如果没有,或许JAXB可能是更好的选择吗?

bdo*_*han 6

注意:我是EclipseLink JAXB(MOXy)的负责人,也是JAXB 2(JSR-222)专家组的成员.

Castor可以这样做吗?如果是这样,它的Ant任务语法是什么.如果没有,或许JAXB可能是更好的选择吗?

下面是如何使用JAXB完成此操作的示例:

产品

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/Product" 
    xmlns:tns="http://www.example.org/Product" 
    elementFormDefault="qualified">
    <element name="product">
        <complexType>
            <sequence>
                <element name="id" type="string"/>
                <element name="name" type="string"/>
            </sequence>
        </complexType>
    </element>
</schema>
Run Code Online (Sandbox Code Playgroud)

由于多个XML模式导入Product.xsd,我们可以利用episode文件,以便只生成一次与Product.xsd相对应的类.

xjc -d out -episode product.episode Product.xsd
Run Code Online (Sandbox Code Playgroud)

ProductPurchaseRequest.xsd

下面是导入Product.xsd的XML模式的示例:

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/ProductPurchaseRequest" 
    xmlns:tns="http://www.example.org/ProductPurchaseRequest"
    xmlns:prod="http://www.example.org/Product" 
    elementFormDefault="qualified">
    <import namespace="http://www.example.org/Product" schemaLocation="Product.xsd"/>
    <element name="purchase-request">
        <complexType>
            <sequence>
                <element ref="prod:product" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
</schema>
Run Code Online (Sandbox Code Playgroud)

当我们从这个XML模式生成类时,我们将引用我们从Product.xsd生成Java类时创建的剧集文件.

xjc -d out ProductPurchaseRequest.xsd -extension -b product.episode
Run Code Online (Sandbox Code Playgroud)

ProductQuoteRequest.xsd

下面是导入Product.xsd的XML模式的另一个示例:

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/ProductQuoteRequest" 
    xmlns:tns="http://www.example.org/ProductQuoteRequest" 
    xmlns:prod="http://www.example.org/Product" 
    elementFormDefault="qualified">
    <import namespace="http://www.example.org/Product" schemaLocation="Product.xsd"/>
    <element name="quote">
        <complexType>
            <sequence>
                <element ref="prod:product"/>
            </sequence>
        </complexType>
    </element>
</schema>
Run Code Online (Sandbox Code Playgroud)

再次,当我们从这个XML模式生成类时,我们将引用我们从Product.xsd生成Java类时创建的剧集文件.

xjc -d out ProductQuoteRequest.xsd -extension -b product.episode
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息