gpt4 book ai didi

java - Castor 能否处理从基 XSD 导入的多个 XSD 的类生成?

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:06 24 4
gpt4 key购买 nike

我有几个重用相同实体的 XSD。例如,ProductPurchaseRequest.xsd 的两个 XSD和 ProductQuoteRequest.xsd两者都有一个 <product>在其中标记以描述相关产品。为此,我创建了一个 Product.xsd文件来定义 <product>标签和两个ProductPurchaseRequest.xsdProductQuoteRequest.xsd导入 Product.xsd用`.

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

Castor 能做到吗?如果是这样,它的 Ant 任务语法是什么。如果不是,JAXB 可能是更好的选择吗?

最佳答案

注意:我是 EclipseLink JAXB (MOXy) JAXB 2 (JSR-222) 的领导和成员专家组。

Can Castor do this? If so, what would be the Ant task syntax for it. If not, would perhaps JAXB be a better alternative?

下面是如何使用 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>

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

xjc -d out -episode product.episode Product.xsd

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>

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

xjc -d out ProductPurchaseRequest.xsd -extension -b product.episode

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>

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

xjc -d out ProductQuoteRequest.xsd -extension -b product.episode

了解更多信息

关于java - Castor 能否处理从基 XSD 导入的多个 XSD 的类生成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7986082/

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