2011-10-26 59 views
1

我使用这个模式通过JAXB生成一个java类。但是,生成的类不是抽象的。另外,当我包含实现类的绑定时,由于Object Factory需要创建实例,所以我无法声明该类抽象。我不完全明白这一点。任何人都可以帮忙吗?谢谢 !JAXB生成的抽象类不是抽象的

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

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

回答

1

IIRC摘要只是说,通常你不会实例化这个类,它只应用于扩展。因此抽象检查取决于JAXB,并且与语言级抽象类无关

1

您应该看到为抽象复杂类型创建的抽象类(请参见下面的示例)。你能提供关于你的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 

的ContactInfo

生成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 { 


} 
+0

布莱斯谢谢!但不知何故,我得不到相同的输出。我在JDK 6中使用xjc版本“JAXB 2.1.10”。这是问题吗?您能否请提一下哪些细节可以提供帮助,因为它是公司代码:|无法复制粘贴:( – EFreak

+0

@EFreak - 我很好奇你的类型层次结构如何。抽象类(抽象)扩展someModel:BaseClass(抽象?)扩展?(抽象?)。 –

+0

当前它的AbstractClass继承了NonAbstractBaseClass1扩展了另一个NonAbstractBaseClass2 – EFreak