私はやることに使ってjava jaxb2.0
います。
このような問題に遭遇しました。
サンプル xml は次のようになります* (fruit.xml) *:xml marshalling
unmarshalling
<fruitPacks>
<fruit name="apple1" type="apple" isApple="true"/>
<fruit name="banana1" type="banana" isBanana="true"/>
<fruit name="apple2" type="apple" isApple="true"/>
</fruitPacks>
そして、次のようなJavaクラス:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "fruitPacks")
@XmlRootElement
public class FruitPacks
{
@XmlElement(name = "fruit")
private List<Fruit> fruits
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "fruit")
@XmlSeeAlso({ Apple.class, Banana.class })
public class Fruit{
@XmlAttribute
private String name;
@XmlAttribute
private String type;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "apple")
public class Apple extends Fruit{
@XmlAttribute
private boolean isApple = true;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "banana")
public class Banana extends Fruit{
@XmlAttribute
private boolean isBanana = true;
}
非整列化コードは次のとおりです。
public class JAXBTest {
public static void main(String [] args) throws Exception{
JAXBContext jc = JAXBContext.newInstance(FruitPacks.class,Fruit.class,Apple.class, Banana.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Object obj = unmarshaller.unmarshal(new File("fruit.xml"));
System.out.println(obj);
}
}
だから私がやりたいことは:
xml をアンマーシャリングするとき、フルーツの構築は type 属性に基づいてサブクラス (Apple、Banana) に対して自動的に行われます。
どうすればできますか?