XMLファイルをデシリアライズする際に問題があります。同じ名前のノードをXStreamで2つの異なるクラスにデシリアライズする方法
私のファイルは次のようである:
<mission>
<branch>
<alternative uid="0" type="ALT_MONITOR"/>
<alternative uid="1" type="ALT_IF" condition="i==10"/>
</branch>
</mission>
私は代替というクラスがあります。
public abtract class Alternative {
@XStreamAsAttribute
public int uid;
@XStreamAsAttribute
public String type;
}
このクラスは、他の二つのクラスによって拡張されます。
@XStreamAlias("alternative")
public class AlternativeA extends Alternative {
}
@XStreamAlias("alternative")
public class AlternativeB extends Alternative {
@XStreamAsAttribute
public String condition;
}
し、私が持っているのxStreamコンバータ:
public class AlternativeConverter extends ReflectionConverter {
public AlternativesConverter(Mapper mapper, ReflectionProvider reflectionProvider) {
super(mapper, reflectionProvider);
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
if (reader.getAttribute("condition") != null) {
AlternativeA alternativeA = new AlternativeA();
alternativeA.setUid(Integer.parseInt(reader.getAttribute("uid")));
alternativeA.setCondition(reader.getAttribute("condition"));
return super.doUnmarshal(alternativeA, reader, context);
}else {
AlternativeB alternativeB = new AlternativeB();
alternativeB.setUid(Integer.parseInt(reader.getAttribute("uid")));
return super.doUnmarshal(alternativeB, reader, context);
}
}
@SuppressWarnings("unchecked")
@Override
public boolean canConvert(Class clazz) {
return Alternative.class.isAssignableFrom(clazz);
}
}
しかし、私はオブジェクトにxmlを変換しようとします。それが条件と代替に達すると、それは例外をスロー:あなたのいずれかがそのエラーを引き起こす可能性があるものにアイデアやint型を持っていますか
はAlternativeA
を入力するタイプのAlternativeBを変換することができませんか? ありがとうございます。
クラスAlternativeAは何の条件属性を持っていません。 – Mark