Java JaxB2Marshaller未将XML绑定到Kotlin数据类
我正在编写一个批处理作业来解析XML、提取字段并将它们保存在数据库中。在解析XML时,它会选择2个根元素,但会将所有字段保留为空,因此在我的数据库中,我有2条记录将为空字段。似乎无法理解为什么它无法读取元素。。。短暂性脑缺血发作Java JaxB2Marshaller未将XML绑定到Kotlin数据类,java,xml,kotlin,jaxb,spring-batch,Java,Xml,Kotlin,Jaxb,Spring Batch,我正在编写一个批处理作业来解析XML、提取字段并将它们保存在数据库中。在解析XML时,它会选择2个根元素,但会将所有字段保留为空,因此在我的数据库中,我有2条记录将为空字段。似乎无法理解为什么它无法读取元素。。。短暂性脑缺血发作 @Bean fun xmlFileItemReader(environment: Environment): ItemReader<ConsumerInfo> { val xmlFileReader = StaxEventItem
@Bean
fun xmlFileItemReader(environment: Environment): ItemReader<ConsumerInfo> {
val xmlFileReader = StaxEventItemReader<ConsumerInfo>()
xmlFileReader.setResource(ClassPathResource(environment.getRequiredProperty(PROPERTY_XML_SOURCE_FILE_PATH)))
xmlFileReader.setFragmentRootElementName("ConsumerInfo")
val customerMarshaller = Jaxb2Marshaller()
customerMarshaller.setClassesToBeBound(ConsumerInfo::class.java)
xmlFileReader.setUnmarshaller(customerMarshaller)
return xmlFileReader
}
XML
更新:
在使用Kotlin数据类时,@XmlElement(name=“****”)似乎没有将读卡器/封送器映射到该字段,而是使用val名称尝试映射。如果希望将@XmlELement与Kotlin一起使用,则需要显式地创建getter
Kotlin溶液:
@XmlRootElement(name = "ConsumerInfo")
class DemoCustomer {
@get:XmlElement(name = "FirstName")
var firstName: String? = null
@get:XmlElement(name = "LastName")
var lastName: String? = null
}
@XmlRootElement(name = "ConsumerInfo")
public class DemoCustomer {
private String firstName;
private String lastName;
@XmlElement(name= "FirstName")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@XmlElement(name = "LastName")
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
Java解决方案:
@XmlRootElement(name = "ConsumerInfo")
class DemoCustomer {
@get:XmlElement(name = "FirstName")
var firstName: String? = null
@get:XmlElement(name = "LastName")
var lastName: String? = null
}
@XmlRootElement(name = "ConsumerInfo")
public class DemoCustomer {
private String firstName;
private String lastName;
@XmlElement(name= "FirstName")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@XmlElement(name = "LastName")
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
尝试
@get:xmlement
。这实际上是可行的,但是,您不能使用数据类,您需要显式地创建所有getter
@XmlRootElement(name = "ConsumerInfo")
public class DemoCustomer {
private String firstName;
private String lastName;
@XmlElement(name= "FirstName")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@XmlElement(name = "LastName")
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}