2

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();
  }

 }
}
4

1 に答える 1