我正在使用命令行中的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”。这可能是问题的原因吗?
有什么想法吗?
答案 0 :(得分:3)
当elementFormDefault="qualified"
对应于此XML Schema的所有元素都将被命名空间限定。当elementFormDefault="unqualified"
只有全局(顶级)元素将被命名空间限定。
JAXB允许使用@XmlSchema
在包级别设置名称空间限定。由于您有多个模式和未公开数量的生成包,因此XJC很可能为名称空间生成""
以覆盖默认限定以匹配模式规则。