通过多个文件从模式复合生成JAX-B类

时间:2012-02-29 11:08:11

标签: java xsd jaxb

我正在使用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
   }

在其他架构中,它工作正常,但它看起来像在不同的文件中的架构,它没有多大帮助。有没有办法从架构中获取第二个版本? 谢谢。

1 个答案:

答案 0 :(得分:1)

有一点需要确定的是,在很多XSD中正确拥有相同的内容而不是很少,不会改变生成过程的结果。在您的情况下,问题是您的架构大量使用xsd:choice,因此您的getter命名。选择是无限的,你得到一个清单;你可以使用自定义绑定使名称更友好,但这不会改变底层结构。在您的情况下,您必须导航列表中的对象,尝试查看它们是否与“General”或“LifeCycle”类匹配,这将具有您正在寻找您所追求的属性的字符串(请参见图表)下文)。

LOM.xsd