JAXB を使用してプロジェクトを行っていますが、問題が発生しています。プログラムの出力、つまり indexFields の長さの前にヌル値を取得しています。私のxmlファイルは次のようになります
<?xml version="1.0" ?>
<XmlImportConfig>
<indexfields value="Corporate - Finance Documents">
<indexlist>
<index name="Field1" value="FDEPTNAME"/>
<index name="Field2" value="FDEPTGRP"/>
<index name="Field3" value="FDOCAREA"/>
<index name="Field4" value="FDOCTYPE"/>
<index name="Field10" value="RECDISPCODE"/>
<index name="Field11" value="RECMODIFYDATE"/>
<index name="Field12" value="RECDISPDATE"/>
<index name="Field15" value="FILECMIDKEY"/>
</indexlist>
</indexfields>
<indexfields value="Corporate - Governance Documents">
<indexlist>
<index name="Field1" value="GDEPTNAME"/>
<index name="Field2" value="GDEPTGRP"/>
<index name="Field3" value="GDOCAREA"/>
<index name="Field4" value="GDOCTYPE"/>
<index name="Field10" value="RECDISPCODE"/>
<index name="Field11" value="RECMODIFYDATE"/>
<index name="Field12" value="RECDISPDATE"/>
<index name="Field15" value="FILECMIDKEY"/>
</indexlist>
</indexfields>
</XmlImportConfig>
サンプルコードを書きました
@XmlRootElement(name="XmlImportConfig")
public class XmlImportConfig {
private indexfields indexField;
private ArrayList<indexlist> listOfIndexes;
private ArrayList<indexfields> listOfIndexFields;
public indexfields getIndexField() {
return indexField;
}
@XmlElement(name="indexfields")
public void setIndexField(indexfields indexField) {
this.indexField = indexField;
}
public ArrayList<indexlist> getListOfIndexes(){
return listOfIndexes;
}
public ArrayList<indexfields> getListOfIndexFields(){
return listOfIndexFields;
}
@XmlElementWrapper(name = "XmlImportConfig")
@XmlElement(name = "indexfields")
public void setListOfIndexFields(ArrayList<indexfields> listOfIndexFields) {
this.listOfIndexFields = listOfIndexFields;
}
}
ファイル 2:
@XmlRootElement(name="indexfields")
@XmlAccessorType(XmlAccessType.FIELD)
public class indexfields {
@XmlAttribute
private String value;
private String indexlist;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
それを実行するためのテストコード
public class testXml {
public static void main(String[] args) {
try {
// create JAXB context and initializing Marshaller
JAXBContext jaxbContext = JAXBContext.newInstance(XmlImportConfig.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
// specify the location and name of xml file to be read
File XMLfile = new File("C:\\Users\\Admin\\Desktop\\xml file\\KeywordFormConfig.xml");
// this will create Java object - country from the XML file
XmlImportConfig importCOnfig = (XmlImportConfig) jaxbUnmarshaller.unmarshal(XMLfile);
System.out.println("get Index Field value "+((indexfields)importCOnfig.getIndexField()).getValue());
System.out.println("length of indexFields "+importCOnfig.getListOfIndexFields());
} catch (JAXBException e) {
// some exception occured
e.printStackTrace();
}
}
}