2013-04-03 83 views
0

我有一個ElectivePolicy抽象類,它有兩個子類PackagedElectivePolicy和SimpleElectivePolicy。爲映射這種繼承關係,我使用了typeAdapter,並且當我檢查它時,unmarshal方法被調用並且工作正常,但是在具有選擇策略對象的程序類中,對象保持爲空,您能幫我解決這個問題嗎? 感謝jaxb繼承,unmarshalling cause nullpointerexception

ElectivePolicy:

@XmlJavaTypeAdapter(ElectivePolicyAdapter.class) 
    public abstract class ElectivePolicy { 
} 

ElectivePolicyAdapter:

public class ElectivePolicyAdapter extends XmlAdapter<ElectivePolicyAdapter.AdaptedElectivePolicy, ElectivePolicy>{ 

    @Override 
    public ElectivePolicy unmarshal(AdaptedElectivePolicy adaptedElectivePolicy) throws Exception { 

     if(adaptedElectivePolicy == null) 
      return null; 
     if(adaptedElectivePolicy.packages == null){ 
      SimpleElectivePolicy sep = new SimpleElectivePolicy(); 
      return sep; 
     } 
     else{ 
      PackegedElectivePolicy pep = new PackegedElectivePolicy(); 
      pep.packages = adaptedElectivePolicy.packages; 
      return pep; 
     } 
    } 

    @Override 
    public AdaptedElectivePolicy marshal(ElectivePolicy v) throws Exception { 
     if(v == null) 
      return null; 
     AdaptedElectivePolicy adaptedElectivePolicy = new AdaptedElectivePolicy(); 
     if(v instanceof PackegedElectivePolicy){ 
      PackegedElectivePolicy pep = (PackegedElectivePolicy) v; 
      adaptedElectivePolicy.packages = pep.packages; 
     } 
     return adaptedElectivePolicy; 
    } 

    public static class AdaptedElectivePolicy{ 
     @XmlElement 
     ArrayList<Package> packages; 
    } 
} 

SimpleElectivePolicy:

public class SimpleElectivePolicy extends ElectivePolicy{ 
} 

PackegedElectivePolicy:

public class PackegedElectivePolicy extends ElectivePolicy { 

    ArrayList<Package> packages; 
    public PackegedElectivePolicy(){ 
     packages = new ArrayList<Package>(); 
    } 
    public ArrayList<Package> getPackages() { 
     return packages; 
    } 

計劃:

@XmlRootElement(name = "program") 
@XmlType(propOrder = {"policy" }) 
public class Program { 
    @XmlElement(name = "ElectivePolicy") 
    public ElectivePolicy getPolicy() { 
     return policy; 
    } 
} 

回答

0

我沒有爲政策制定者添加,並且造成了NullPointerException異常。