jaxb的javaxml解析问题
我是jaxb新手,需要一些帮助
当我试图执行下面的代码时,我得到了输出的空值。请有人指导我如何达到预期的产量
我正在尝试解组的实际XMl:
<?xml version="1.0" encoding="UTF-8"?>
<customer >
<cash xmlns:cash="uri:cash" >
<cash:no>10</cash:no>
<cash:name>naveen</cash:name>
<cash:age>27</cash:age>
<cash:phno>9176927613</cash:phno>
</cash>
</customer>
我正在使用的映射类:
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
@XmlRootElement(name="cash")
public class Cash {
private int no;
private String name;
private int age;
private Long phno;
public int getNo() {
return no;
}
@XmlElement(name="cash:no",nillable=true)
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
@XmlElement(name="cash:name",nillable=true)
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@XmlElement(name="cash:age",nillable=true)
public void setAge(int age) {
this.age = age;
}
public Long getPhno() {
return phno;
}
@XmlElement(name="cash:phno",nillable=true)
public void setPhno(Long phno) {
this.phno = phno;
}
@Override
public String toString() {
return "Cash [no=" + no + ", name=" + name + ", age=" + age + ", phno="
+ phno + "]";
}
}
客户DTO:
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="customer")
public class Customer {
private List<Cash> cash;
public List<Cash> getCash() {
return cash;
}
@XmlElement(name="cash")
public void setCash(List<Cash> cash) {
this.cash = cash;
}
@Override
public String toString() {
return "Customer [cash=" + cash + "]";
}
}
编组站:
File file = new File("cust.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer que= (Customer) jaxbUnmarshaller.unmarshal(file);
System.out.println(que);
实际输出:Customer [cash=[Cash [no=0, name=null, age=0, phno=null]]]
预期输出是实际的XML数据
# 1 楼答案
在现金类,而不是
@XmlElement(name="cash:no",nillable=true)
尝试从名称值中删除
cash:
:@XmlElement(name="no",nillable=true)
这产生了:
Customer [cash=[Cash [no=10, name=naveen, age=27, phno=9176927613]]]
另一种选择是将名称空间添加到注释:
@XmlElement ( name = "no", namespace = "uri:cash" , nillable = true )
要获得更多信息,请在解组器中添加
DefaultValidationEventHandler
:这将输出:
根据@XMLElement注释,
{}cash:no
是应该的,但是xml解析出的本地名称是no
,而不是cash:no
(这是在JDK 8中实现的)
====
使用JDK1.6.0@,我在Cash上的@XMLElement上运行了三种变体。没有财产。这导致了两次失败和一次成功。使用标准的JavaMaven项目。我的环境没有其他变化
1@xmlement(name=“cash:no”,nillable=true)原始代码
2@xmlement(name=“no”,nillable=true) 3@xmlement(name=“no”,namespace=“uri:cash”,nillable=true)第三次跑步在前两次跑步时遇到了意想不到的因素,但这是现金。名称属性