recursive xsd使用Objects而不是给定的Type生成java类

时间:2017-10-24 18:49:28

标签: java xml

所以,我有一个对象,可以包含该类型的对象列表。我写了一个看起来像这样的XSD:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="myNamespace" elementFormDefault="qualified">  
   <complexType name="BinModel">
      <sequence>
         <element type="string" name="min" />
         <element type="string" name="max" />
         <element type="string" name="fieldname" /> 
         <element type="int" name="defaultValue" />
         <element xmlns:ref="BinModel" name="innerBins" maxOccurs="unbounded" minOccurs="0" />
      </sequence>  
   </complexType>
   <element name="AllBins">  
      <complexType>  
         <sequence>  
            <element type="string" name="fieldnames" maxOccurs="unbounded" minOccurs="0"/>
            <element type="int" name="defaultValue"/>
            <element xmlns:type="BinModel" name="outerBins" maxOccurs="unbounded" minOccurs="0" />
         </sequence>
      </complexType>  
   </element>
</schema>

它分别生成两个java类,BinModel和AllBins,但是在每个类中,即使我指定它们包含类型BinModel的列表,它也会生成类型为Object的List。

如何生成列表为BinModel s?

的类

1 个答案:

答案 0 :(得分:0)

所以当我在xmlnstype之前添加ref以便在编辑器中不显示错误时,我意识到出了问题。我查看另一个xsd,在我愚蠢的巨大代码库中的其他地方递归定义了Object,试图找到解决方案并发现了两件事。 我们正在定义自己的命名空间 2.我们在该命名空间中引用了自己的对象。

所以修正后的代码看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:myProject="projectNamespace" targetNamespace="myNamespace" elementFormDefault="qualified">  
  <complexType name="BinModel">
     <sequence>
        <element type="string" name="min" />
        <element type="string" name="max" />
        <element type="string" name="fieldname" /> 
        <element type="int" name="defaultValue" />
        <element type="myProject:BinModel" name="innerBins" maxOccurs="unbounded" minOccurs="0" />
     </sequence>  
  </complexType>
  <element name="AllBins">  
     <complexType>  
        <sequence>  
           <element type="string" name="fieldnames" maxOccurs="unbounded" minOccurs="0"/>
           <element type="int" name="defaultValue"/>
           <element type="myProject:BinModel" name="outerBins" maxOccurs="unbounded" minOccurs="0" />
        </sequence>
     </complexType>  
   </element>
</schema>