我正在使用JAX-b从XSD架构生成类(由多个文件复合,我不知道这是否是问题)并且结果不是我所期望的。创建的对象不提供getter对于单个属性,但它们为对象提供属性列表的getter,我必须手动转换每个对象。
即。 文件 lom.xsd 有:
<xs:include schemaLocation="common/elementTypes.xsd"/>
<xs:include schemaLocation="common/rootElement.xsd"/>
在文件 elementTypes.xsd 中我们有:
<xs:complexType name="lom">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="general"/>
<xs:group ref="lifeCycle"/>
</xs:choice>
</xs:complexType>
而不是 rootElement.xsd ,我们有
<xs:element name="lom" type="lom">
<xs:unique name="lomUnique">
<xs:selector xpath="*"/>
<xs:field xpath="@uniqueElementName"/>
</xs:unique>
</xs:element>
我得到的是班级:
public class General{
List<Object> titleOrlifeCicle
}
我会假装:
public class General{
String title;
String lifeCicle
}
在其他架构中,它工作正常,但它看起来像在不同的文件中的架构,它没有多大帮助。有没有办法从架构中获取第二个版本? 谢谢。
答案 0 :(得分:1)
有一点需要确定的是,在很多XSD中正确拥有相同的内容而不是很少,不会改变生成过程的结果。在您的情况下,问题是您的架构大量使用xsd:choice,因此您的getter命名。选择是无限的,你得到一个清单;你可以使用自定义绑定使名称更友好,但这不会改变底层结构。在您的情况下,您必须导航列表中的对象,尝试查看它们是否与“General”或“LifeCycle”类匹配,这将具有您正在寻找您所追求的属性的字符串(请参见图表)下文)。