【问题标题】:JaxB xjc generated pojos contains blank namespacesJaxB xjc 生成的 pojos 包含空白命名空间
【发布时间】:2013-11-09 05:34:58
【问题描述】:

我在命令行中使用 xjc 从 XSD 生成 POJO。这是我运行的命令:

"%java_home%\bin\xjc" -p com.etc.etc.etc.etc ConsolidatedAlert.xsd

对于生成的一些 POJO,POJO 中的属性返回如下:

@XmlElement(name = "UnparsedTelephone", namespace="")
protected String unparsedTelephone;

据我所知,我对这些元素的指定与其他没有“命名空间”属性的元素没有任何不同。

这是 XSD 的相关部分:

类型声明:

<xs:complexType name="TelephoneType">
    <xs:choice>
        <xs:element name="UnparsedTelephone" type="xs:string"/>
        <xs:element name="ParsedTelephone" type="ParsedTelephoneType"/>
    </xs:choice>
</xs:complexType>

元素声明:

<xs:element name="Telephone" type="TelephoneType"/>

使用“电话”的地方:

<xs:complexType name="CompanyContactType">
    <xs:sequence>
        <xs:element ref="Telephone"/>
    </xs:sequence>
</xs:complexType>

使用“CompanyContact”的地方:

<xs:complexType name="AmountType">
        <xs:sequence>
            <xs:element ref="CompanyContact" minOccurs="0" />
            <xs:element name="TriggerAmount" type="xs:string"/>
        </xs:sequence>
</xs:complexType>

我可以简单地从每个 POJO 中删除 namespace="",但这可能需要一点时间,而且我想更好地了解它首先发生的原因。

此外,这大约是 8 个 XSD 全部链接在一起。它们在架构定义中都具有相同的 targetNamespace 和 xmlns,但其中一些具有 elementFormDefault="unqualified",而另一些具有 elementFormDefault="qualified"。这可能是问题的原因吗?

有什么想法吗?

【问题讨论】:

    标签: java xml jaxb xsd


    【解决方案1】:

    命名空间限定和 XML 架构

    elementFormDefault="qualified" 时,与此 XML Schema 对应的所有元素都将是命名空间限定的。当elementFormDefault="unqualified" 只有全局(顶级)元素将被命名空间限定。

    命名空间限定和 JAXB

    JAXB 允许使用@XmlSchema 在包级别设置命名空间限定。由于您有多个模式和未公开数量的生成包,因此 XJC 很可能为命名空间生成 "" 以覆盖默认限定以匹配模式规则。

    【讨论】:

    • 就这么简单!将几个“不合格”的模式更改为“合格”,就成功了!现在我想知道在什么情况下你会使用“不合格”。
    猜你喜欢
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多