У меня есть абстрактный класс ElectivePolicy, который имеет два подкласса: PackagedElectivePolicy и SimpleElectivePolicy. для сопоставления этого отношения наследования я использую typeAdapter, и, как я проверил, метод unmarshal вызывается и работает хорошо, но в программном классе, который имеет объект выборной политики, объект остается нулевым. Можете ли вы помочь мне с этой проблемой? Благодарность
Выборная политика:
@XmlJavaTypeAdapter(ElectivePolicyAdapter.class)
public abstract class ElectivePolicy {
}
ЭлективеПолициадаптер:
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;
}
}
Простая выборная политика:
public class SimpleElectivePolicy extends ElectivePolicy{
}
PackedElectivePolicy:
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;
}
}