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

감사 블 레즈! 그러나 어쨌든 나는 같은 결과를 얻지 못한다. 나는 xjc 버전 "JAXB 2.1.10 in JDK 6"을 사용하고 있습니다. 그게 문제 야? 회사 코드 이후에 어떤 세부 사항이 도움이 될 수 있는지 언급 해주십시오 : | 붙여 넣기를 복사 할 수 없습니다 :( – EFreak

+0

@EFreak - 타입 계층 구조가 어떻게되는지 궁금합니다. AbstractMapel : BaseClass (abstract?) extends? (abstract?) –

+0

현재 AbstractClass는 NonAbstractBaseClass1을 확장합니다. 다른 NonAbstractBaseClass2를 확장합니다. – EFreak

관련 문제