Castor可以处理从基础XSD导入的多个XSD生成类吗?
我有几个重用相同实体的XSD。 例如, ProductPurchaseRequest.xsd
和ProductQuoteRequest.xsd
的XSD都有一个标记来描述相关产品。 出于这个原因,我创建了一个
Product.xsd
文件来定义标签,
ProductPurchaseRequest.xsd
和ProductQuoteRequest.xsd
都使用`导入Product.xsd
。
我想使用Castor从这些XSD生成Java类,并且两者都使用相同的类来表示Product
这样我就可以重用相同的逻辑将它们映射到我们模型的ProductModel
类。
Castor可以这样做吗? 如果是这样,它的Ant任务语法是什么。 如果没有,或许JAXB可能是更好的选择吗?
注意:我是EclipseLink JAXB(MOXy)的负责人,也是JAXB 2(JSR-222)专家组的成员。
Castor可以这样做吗? 如果是这样,它的Ant任务语法是什么。 如果没有, 或许JAXB可能是更好的选择吗?
下面是如何使用JAXB完成此操作的示例:
产品
由于多个XML模式导入Product.xsd,因此我们可以利用episode文件,以便只生成一次与Product.xsd相对应的类。
xjc -d out -episode product.episode Product.xsd
ProductPurchaseRequest.xsd
下面是导入Product.xsd的XML模式的示例:
当我们从这个XML模式生成类时,我们将引用我们从Product.xsd生成Java类时创建的剧集文件。
xjc -d out ProductPurchaseRequest.xsd -extension -b product.episode
ProductQuoteRequest.xsd
下面是导入Product.xsd的XML模式的另一个示例:
再次,当我们从这个XML模式生成类时,我们将引用我们从Product.xsd生成Java类时创建的剧集文件。
xjc -d out ProductQuoteRequest.xsd -extension -b product.episode
了解更多信息
所以我能够使用JAXB参考实现来完成所有工作。 诀窍是要意识到从JAXB站点 下载是一个下载器而不是实际的库! 双击以接受许可证,库将在本地下载。 创建了一个测试文件夹( JAXB_TEST
)并将所有下载的.jar
复制到lib
子文件夹。 我将所有XSD放在XSD
子文件夹中。 之后,我运行了以下Ant build.xml
文件。
我遇到的唯一问题是我有一个带有root标签的xsd,名为
,匿名扩展了Product
类型以添加一个version
属性(我总是喜欢在我的root标签上),这导致了JAXB的名称冲突。 因此,我将匿名类型转换为命名类型(即TopLevelProduct
)并将根设置为该类型,JAXB对此感到满意。