JaxB xjc生成的pojos包含空名称空间

时间:2013-10-29 20:49:45

标签: java xml jaxb xsd

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

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

对于生成的一些POJO,POJO中的属性如下所示:

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

据我所知,我没有指明这些元素与没有“namespace”属性的其他元素不同。

以下是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”。这可能是问题的原因吗?

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

命名空间资格&amp; XML Schema

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

命名空间资格&amp; JAXB

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