Sle*_*led 3 java xml ant castor jaxb
我有几个重用相同实体的XSD.例如,既为中的XSD ProductPurchaseRequest.xsd和ProductQuoteRequest.xsd都有一个<product>在他们的标签来描述产品的问题.出于这个原因,我创建了一个Product.xsd文件来定义 <product>标签和两者,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 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)
欲获得更多信息