【问题标题】:JAXB generated abstract class not abstractJAXB 生成的抽象类不是抽象的
【发布时间】:2011-10-26 05:46:09
【问题描述】:

我使用这个模式通过 JAXB 生成一个 java 类。但是,生成的类不是抽象的。此外,当我包含实现类的绑定时,我无法声明该类抽象,因为对象工厂需要创建一个实例。我不完全明白这一点。有人可以帮忙吗?谢谢!

<xs:complexType name="AbstractClass" abstract="true">
    <xs:complexContent>
        <xs:extension base="someModel:BaseClass">
            <xs:sequence>

            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

【问题讨论】:

    标签: java jaxb xsd


    【解决方案1】:

    IIRC 抽象只是说通常你不会实例化这个类,它应该只用于扩展。所以抽象检查由 JAXB 决定,与语言级别的抽象类无关

    【讨论】:

      【解决方案2】:

      您应该看到为抽象复杂类型创建的抽象类(参见下面的示例)。您能否提供有关您的 XML 架构的更多详细信息?

      inheritance.xsd

      contactInfo 是一个抽象的复杂类型。

      <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      
          <xs:complexType name="contactInfo" abstract="true">
              <xs:sequence/>
          </xs:complexType>
      
          <xs:complexType name="phoneNumber">
              <xs:complexContent>
                  <xs:extension base="contactInfo">
                      <xs:sequence/>
                  </xs:extension>
              </xs:complexContent>
          </xs:complexType>
      
      </xs:schema>
      

      XJC 通话

      xjc -d out inheritance.xsd
      

      联系信息

      生成的ConactInfo类是抽象的:

      package generated;
      
      import javax.xml.bind.annotation.XmlAccessType;
      import javax.xml.bind.annotation.XmlAccessorType;
      import javax.xml.bind.annotation.XmlSeeAlso;
      import javax.xml.bind.annotation.XmlType;
      
      @XmlAccessorType(XmlAccessType.FIELD)
      @XmlType(name = "contactInfo")
      @XmlSeeAlso({
          PhoneNumber.class
      })
      public abstract class ContactInfo {
      
      
      }
      

      【讨论】:

      • 谢谢布莱斯!但不知何故,我没有得到相同的输出。我正在使用 xjc 版本“JDK 6 中的 JAXB 2.1.10”。那是问题吗?您能否提及哪些细节会有所帮助,因为它是公司代码:|无法复制粘贴:(
      • @EFreak - 我很好奇你的类型层次结构如何。抽象类(抽象)扩展了一些模型:BaseClass(抽象?)扩展? (抽象?)。
      • 目前它是 AbstractClass extends NonAbstractBaseClass1 再次扩展了另一个 NonAbstractBaseClass2
      猜你喜欢
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多