I have an ElectivePolicy abstract class which has two subclasses, PackagedElectivePolicy and SimpleElectivePolicy. for mapping this inheritance relationship I've use typeAdapter and as I checked it the unmarshal method gets called and works well but in program class which has an object of Elective policy, the object remain null, Can you help me with this problem? thanks
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;
}
Program:
@XmlRootElement(name = "program")
@XmlType(propOrder = {"policy" })
public class Program {
@XmlElement(name = "ElectivePolicy")
public ElectivePolicy getPolicy() {
return policy;
}
}
I had not add setter for policy and that had caused nullPointerException.