我正在尝试使用Spring Batch读取xml文件,因此我可以解析出某些数据并将其放置在dat文件中。但是,每当我尝试处理文件时,都会收到NullPointerException。调查原因,似乎我要填充值的对象被设置为null。它会创建一个在xml中找到的相同数量的School标记的列表,但是值是null。以下是我尝试读取的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;
}
}
Teacher.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>
您的XML包装在SchoolList
标记中
那么您的SchoolList.java在哪里?
此处理器正在寻找“学校”根元素名称。您的xml中没有此类元素。更改此:
xmlFileReader.setFragmentRootElementName("school");
对此:
xmlFileReader.setFragmentRootElementName("School");