2013-11-28 198 views
0

我對JAXB很陌生,並將XSD文件解析爲Java類。 該計劃是有一個抽象類和多個類來擴展抽象類。所有的子類都必須重寫一個特定的方法。 實現此目標的最佳方法是什麼?希望有人能給我一個提示。 基本上我已經在目前這個實現:JAXB覆蓋抽象方法

抽象類XSD描述:

<xs:complexType name="DataObject" abstract="true"> 
    <xs:sequence> 
     <xs:element name="value" type="xs:string"/> 
     <xs:element name="dataType" type="xs:string"/> 
     <xs:element name="match" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

現在,我想重寫,吸氣的「數據對象」抽象類中的「匹配」的對象我的子類XSD描述文件。 在此先感謝。

+0

什麼你想重寫'getMatch'方法呢? –

+0

基本上我想創建一個默認類的不同的子類。假設我的基地是'汽車',子類別是'ferrari','保時捷'。 getMatch會返回尺寸是重要還是馬力。理想情況下getMatch方法的返回類型會有所不同。 – jackoneill87

回答

0

請注意,JAXB不能創建抽象類的實例;因此您需要將xml標籤綁定到DataObject的具體子類。

下面的例子顯示了一個具體的StringMatchDataObject類;其他類可以按照同樣的結構:

public abstract class DataObject { 

    private String value; 
    private String dataType; 

    public String getValue() { 
    return value; 
    } 
    public void setValue(String value) { 
    this.value = value; 
    } 
    public String getDataType() { 
    return dataType; 
    } 
    public void setDataType(String dataType) { 
    this.dataType = dataType; 
    } 

    public abstract String getMatch(); 
    public abstract void setMatch(String match); 
} 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name="DataObject") 
public class StringMatchDataObject extends DataObject { 

    private String match; 

    @Override 
    public String getMatch() { 
    return match; 
    } 

    @Override 
    public void setMatch(String match) { 
    this.match = match; 
    } 

} 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 

public class AppRun { 

    public static void main(String[] args) throws JAXBException { 

     StringMatchDataObject stringMatchDataObject = new StringMatchDataObject(); 
     stringMatchDataObject.setDataType("data type"); 
     stringMatchDataObject.setMatch("STRING MATCH"); 
     stringMatchDataObject.setValue("value"); 

     JAXBContext context = JAXBContext.newInstance(StringMatchDataObject.class); 
     Marshaller m = context.createMarshaller(); 
     m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     m.marshal(stringMatchDataObject, System.out); 
    } 

} 
相關問題