2013-03-06 28 views
2

我有問題使用JAXB2Marshaller將xml元素解組爲字符。JAXB2Marshaller not unmarshaling xml元素到字符

我的XML輸入包含一個元素<dateCheckFlag>Y</dateCheckFlag>: 當我試圖讓dateCheckFlag元素值進入我的POJO Character類型,它給了我零。

假設所有的setter getter和構造函數都存在。

任何人都可以幫我解決如何解析XML元素到字符...?

@XmlRootElement(name="Emp") 
class Emp 
{ 
    @XmlElement(name="name"); 
     String name; 
    @XmlElement(name="dateCheckFlag"); 
     Character dateCheckFlag; 
Emp(){} 

Emp(String name, Character dateCheckFlag) 
{ 
this.name= name; 
this.dateCheckFlag = dateCheckFlag; 
} 

public void setName(String name) 
{ 
this.name=name; 
} 
public String getName() 
{ 
return name; 
} 

public void setDateCheckFlag(Character flag) 
{ 
this.dateCheckFlag=flag; 
} 
public Character getName() 
{ 
return dateCheckFlag; 
} 
+0

你需要共享你的代碼。 – Apurv 2013-03-06 07:02:38

+0

Plz顯示你的代碼。 – KSHiTiJ 2013-03-06 07:45:44

+0

當我嘗試調用getDateCheckFlag()方法時,我添加了小代碼快照,它返回空值。 – ManojP 2013-03-06 08:03:29

回答

0

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> 
+0

我給Y而不是89 ...我使用XmlAdaptor進行日期轉換.java.sql.Date ... – ManojP 2013-03-06 11:04:36

+1

非常感謝這麼好的解釋。這正是我將java日期轉換爲sql日期所做的。 – ManojP 2013-03-06 11:39:06