[英]jaxb2-maven-plugin ignores namespace when generating xsd - Two classes have the same XML type
[英]XSD: Imported elements of a different namespace are taking up the target namespace of the parent when generating POJOs via the Jaxb plugin
我试图通过maven JAXB插件生成POJO来解析我得到的XML。 我的XML中有一个根级元素,它的命名空间与其中的其他元素不同。 以下是XML:
<?xml version="1.0" encoding="UTF-8"?>
<skuFlatFileType xmlns="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd" xmlns:ns0="http://www.xyz/schemas/dbm/product/V1">
<FlattenedSKU>
<ns0:SKU></ns0:SKU>
</FlattenedSKU>
</skuFlatFileType>
由于FlattenedSKU和SKU位于不同的命名空间中。 所以我为FlattenedSKU下的所有元素声明了一个单独的XSD,然后将其导入到父元素中。 XSD看起来像这样:
sku_wrapper.xsd
<xs:schema
xmlns="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
targetNamespace="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:ns0="http://www.xyz/schemas/dbm/product/V1">
<xs:import namespace="http://www.xyz/schemas/dbm/product/V1"
schemaLocation="sku.xsd" />
<xs:element name="FlattenedSKU">
<xs:complexType>
<xs:sequence>
<xs:element name="SKU" type="ns0:SKU"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
子xsd如下:
sku.xsd
<xs:schema attributeFormDefault="qualified"
elementFormDefault="qualified"
xmlns="http://www.xyz/schemas/dbm/product/V1"
targetNamespace="http://www.xyz/schemas/dbm/product/V1"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="SKU">
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:schema>
现在生成的java类看起来像这样:
@XmlRootElement(name = "FlattenedSKU", namespace = "http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd")
public class FlattenedSKU {
@XmlElement(name = "SKU", namespace = "http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd", required = true)
protected SKU sku;
但我需要的是如下:
@XmlRootElement(name = "FlattenedSKU", namespace = "http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd")
public class FlattenedSKU {
@XmlElement(name = "SKU", namespace = "http://www.xyz/schemas/dbm/product/V1", required = true)
protected SKU sku;
有人能告诉我我做错了什么吗?
除了我的评论,你要做的是“ref”到sku.xsd
的元素而不是在sku_wrapper.xsd
创建一个元素
以下内容适合您:
sku.xsd
<xs:schema attributeFormDefault="qualified"
elementFormDefault="qualified"
xmlns="http://www.xyz/schemas/dbm/product/V1"
targetNamespace="http://www.xyz/schemas/dbm/product/V1"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="SKU">
<xs:sequence>
</xs:sequence>
</xs:complexType>
<xs:element name="SKU" type="SKU"/>
</xs:schema>
请注意,更改是元素的声明。
sku_wrapper.xsd
<xs:schema
xmlns="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
targetNamespace="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:ns0="http://www.xyz/schemas/dbm/product/V1">
<xs:import namespace="http://ww
w.xyz/schemas/dbm/product/V1"
schemaLocation="sku.xsd" />
<xs:element name="FlattenedSKU">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns0:SKU"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
注意元素的引用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.