繁体   English   中英

XSD:通过Jaxb插件生成POJO时,不同命名空间的导入元素占用父节点的目标命名空间

[英]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>

由于FlattenedSKUSKU位于不同的命名空间中。 所以我为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM