2
我正在使用JAXB進行封送和取消封送對象。我有一個類字符串列表MyBean作爲字段和@XmlAttribute註釋。JAXB:類型爲unmarshelling字段的列表<String>和@XmlAttribute的問題
@XmlRootElement
public class MyBean {
public MyBean() {
super();
}
private List<String> actualValue;
@XmlAttribute
public List<String> getActualValue() {
if (actualValue == null) {
actualValue = new ArrayList<String>();
}
return actualValue;
}
public void setActualValue(List<String> values) {
this.actualValue = values;
}
}
以下是封送和非封送MyBean的測試類。
public class Test {
public static void main(String[] args) {
try {
// create object ....
MyBean myBean = new MyBean();
List<String> values = new ArrayList<String>();
values.add("Sanjv Singh Baghel");
myBean.setActualValue(values);
// Marsheling
File file = new File("D://Temp//hello2.xml");
JAXBContext jaxbContext2 = JAXBContext.newInstance(MyBean.class);
Marshaller jaxbMarshaller2 = jaxbContext2.createMarshaller();
jaxbMarshaller2.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller2.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
jaxbMarshaller2.marshal(myBean, file);
// Un-Marsheling
JAXBContext jaxbContext = JAXBContext.newInstance(MyBean.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
// printing actual value
MyBean myBean2 = (MyBean) jaxbUnmarshaller.unmarshal(file);
List<String> actualValue = myBean2.getActualValue();
System.out.println(actualValue);
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
輸出:
Before actualValue : ["sanjv singh baghel"]
After actualValue : ["sanjv, singh, baghel"]
奇怪的,我在這裏面臨的是,原來actualValue只有一個串空間和未mashelling,單一字符串轉換爲字符串列表後(分由空間)。
我想知道這是爲什麼發生/它有什麼問題。
對於,我找到兩個可能的解決方案。
- 與@XmlElement
- 列表actualValue更換@XmlAttribute; & Stirng需要映射到簡單類型的模式