Spring Batch не заполняет объекты при чтении XML - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь прочитать XML-файл, используя Spring Batch, чтобы я мог разобрать определенные данные и поместить их в файл данных. Однако всякий раз, когда я пытаюсь обработать файл, я получаю исключение NullPointerException. Изучая причину, кажется, что объект, который я пытаюсь заполнить значения, обнуляется. Он создает список с тем же количеством тегов School, найденных в xml, но значения равны нулю. Ниже приведен пример xml, который я пытаюсь прочитать, и кода, который я использую для заполнения объекта. Что я делаю не так?

ItemReader

@Bean
ItemReader<school> underwritingXmlFileItemReader(){     //Environment environment
    StaxEventItemReader<School> xmlFileReader = new StaxEventItemReader<>();

    xmlFileReader.setResource(editedInput);
    xmlFileReader.setFragmentRootElementName("school");
    Jaxb2Marshaller schoolMarshaller = new Jaxb2Marshaller();
    schoolMarshaller.setClassesToBeBound(School.class);
    xmlFileReader.setUnmarshaller(schoolMarshaller);    
    return xmlFileReader;
}

School.class

@XmlRootElement(name="School", namespace="http://schemas.datacontract.org/2004/07/Diamond.Business.ThirdParty.School.Adapters.Prelude")
@XmlAccessorType(XmlAccessType.NONE)
public class School {

    @XmlElement(name="SchoolNumber", defaultValue="")
    private String uniqueId;

    @XmlElement(name="Teacher", defaultValue= "")
    private Teacher teacher;

    public String getUniqueId() {
        return uniqueId;
    }
    public void setUniqueId(String uniqueId) {
        this.uniqueId = uniqueId;
    }
    public Policyholder getPolicyholder() {
        return policyholder;
    }
    public void setTeacher(Teacher teacher) {
        this.policyholder = policyHolder;
    }
}

Учитель.class

@XmlRootElement(name="Teacher", namespace="http://schemas.datacontract.org/2004/07/Diamond.Business.ThirdParty.School.Adapters.Prelude")
@XmlAccessorType(XmlAccessType.NONE)
public class Teacher {

    @XmlElement(name = "DisplayName", defaultValue="")
    private String fullName;

    @XmlElement(name = "DOB", defaultValue="")
    private String dob;

    public String getFullName() {
        return fullName;
    }
    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
    public String getDob() {
        return dob;
    }
    public void setDob(String dob) {
        this.dob = dob;
    }
}

SchoolList.xml


    <SchoolList xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Diamond.Business.ThirdParty.School.Adapters.Prelude">
  <School>
      <Teacher>
        <DOB>1/1/1970</DOB>
        <DisplayName>Ziva Brown</DisplayName>
        <DoingBusinessAs />
        <FirstName>Ziva</FirstName>
        <LastName>Brown</LastName>
        <MiddleName />
      </Teacher>
  </School>
  <School>
     <Teacher>
        <DOB>1/1/1970</DOB>
        <DisplayName>Alex John</DisplayName>
        <DoingBusinessAs />
        <FirstName>Alex</FirstName>
        <LastName>John</LastName>
        <MiddleName />
     </Teacher>
  </School>
</SchoolList>

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Этот процессор ищет имя корневого элемента "school". В вашем xml таких элементов нет. Измените это:

xmlFileReader.setFragmentRootElementName("school");

на это:

xmlFileReader.setFragmentRootElementName("School");
0 голосов
/ 28 октября 2019

Ваш XML обернут в SchoolList теги

Так где же ваш SchoolList.java?

...