2011-10-26 127 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