的JAXB (JSR-222)規範沒有定義用於char
/Character
XML表示。 默認情況下,JAXB引用implmentation將Character
轉換爲xs:unsignedShort
類型。這意味着,它期待的文件,如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Emp>
<name>Jane Doe</name>
<dateCheckFlag>89</dateCheckFlag>
</Emp>
XmlAdapter
您將能夠使用一個XmlAdapter
獲得您正在尋找的XML。 XmlAdapter
允許您爲了更改XML表示而將一個對象轉換爲另一個對象。
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class CharacterAdapter extends XmlAdapter<String, Character> {
@Override
public Character unmarshal(String string) throws Exception {
return string.charAt(0);
}
@Override
public String marshal(Character character) throws Exception {
return new String(new char[] {character});
}
}
的Emp
的@XmlJavaTypeAdapter
註釋用於指定XmlAdapter
。
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement(name = "Emp")
@XmlAccessorType(XmlAccessType.FIELD)
class Emp {
String name;
@XmlJavaTypeAdapter(CharacterAdapter.class)
Character dateCheckFlag;
}
演示
下面是一些代碼,所述XML從對象模型轉換成/。
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Emp.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum15240702/input.xml");
Emp emp = (Emp) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(emp, System.out);
}
}
的input.xml /輸出
<?xml version="1.0" encoding="UTF-8"?>
<Emp>
<name>Jane Doe</name>
<dateCheckFlag>Y</dateCheckFlag>
</Emp>
你需要共享你的代碼。 – Apurv 2013-03-06 07:02:38
Plz顯示你的代碼。 – KSHiTiJ 2013-03-06 07:45:44
當我嘗試調用getDateCheckFlag()方法時,我添加了小代碼快照,它返回空值。 – ManojP 2013-03-06 08:03:29