Вот мой класс XmlRoot:JAXB Reach Уплотненный XmlElement Пример
@XmlRootElement(name = "IGE")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "IGEType", propOrder = { "altin" })
public class IGEType {
@XmlElement(name = "ALTIN", required = true)
protected List<ALTINType> altin;
public List<ALTINType> getALTIN() {
if (altin == null) {
altin = new ArrayList<ALTINType>();
}
return this.altin;
}
}
Тогда преемник (ребенок) класс корня:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ALTINType", propOrder = { "seanSytl" })
public class ALTINType {
@XmlElement(name = "SEANSytl", required = true)
protected SEANSytlType seanSytl;
}
наконец, преемник класса преемника корня:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SEANSytlType", propOrder = { "birim", "oncekiKapanis", "enDusuk", "enYuksek", "kapanis", "agirlikliOrtalama", "islemHacmi", "islemMiktari", "bicim", "gram", "islemSayisi" })
public class SEANSytlType {
@XmlElement(required = true)
protected String birim;
@XmlElement(name = "onceki_kapanis", required = true)
protected BigDecimal oncekiKapanis;
@XmlElement(name = "en_dusuk", required = true)
protected BigDecimal enDusuk;
@XmlElement(name = "en_yuksek", required = true)
protected BigDecimal enYuksek;
@XmlElement(required = true)
protected BigDecimal kapanis;
@XmlElement(name = "agirlikli_ortalama", required = true)
protected BigDecimal agirlikliOrtalama;
@XmlElement(name = "islem_hacmi", required = true)
protected BigDecimal islemHacmi;
@XmlElement(name = "islem_miktari", required = true)
protected BigDecimal islemMiktari;
@XmlElement(name = "BICIM", required = true)
protected BigDecimal bicim;
@XmlElement(name = "GRAM", required = true)
protected BigDecimal gram;
@XmlElement(name = "islem_sayisi")
protected int islemSayisi;
}
MyHandler класс:
@Override
public void handleXMLtoIABData(RequestTcmbXMLData req) throws HmnServiceException {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(IGEType.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
File XMLfile = new File("C:\\Users\\U067944\\Desktop\\IAB_bülten.xml");
IGEType igeRoot = (IGEType) jaxbUnmarshaller.unmarshal(XMLfile);
**List<SEANSytlType> listofAltinYtl = (List<SEANSytlType>) ((List<ALTINType>) igeRoot.getALTIN()).getSEANSytl();**
for (SEANSytlType altinYtl : listofAltinYtl) {
}
} catch (JAXBException e) {
e.printStackTrace();
}
}
В моем классе обработчика я пытаюсь достичь последнего преемника класса (Список SEANSytlType), но он не работает. я получаю эту ошибку:
jvmId: [300], TransactionID: [3005624292568000] .Root Причина: [java.lang.ClassCastException: java.util.ArrayList не может быть приведен к com.ykb.hmn.mdt. marketdata.xmlparser.iab.ALTINType]
Я также попробовать это в обработчике, но то же самое:
IGEType igeRoot = (IGEType) jaxbUnmarshaller.unmarshal(XMLfile);
String inputDate = igeRoot.getIGEBULTENGUNTR().getGun2();
List<ALTINType> listAltinRoot = (List<ALTINType>) igeRoot.getALTIN();
List<SEANSytlType> listofAltinYtl = (List<SEANSytlType>) listAltinRoot.get(0);
Где я ошибаюсь? Спасибо заранее!
Спасибо за объяснение и ответ –