2010-09-14 38 views
0

我想解析Java中使用SimpleXML的XML對象中的數據。整個事情的重點是將API從JAXB轉換爲SimpleXML。因此,我使用瞭解析文檔的註釋方式。下面是一些代碼:將XML數據直接解析到對象中

在用戶等級:

@Element(name="created", required=false) 
private Date created; 

誰寫的API使用的DateAdapter把字符串中拉從XML直接插入日期程序員。我試圖將其轉換爲SimpleXML。我的假設是變壓器使用了相同的方法。這裏是之前和之後的代碼......

前:

public class DateAdapter extends XmlAdapter<String, Date> { 

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

    public Date unmarshal(String date) throws Exception { 
    return df.parse(date); 
    } 

    public String marshal(Date date) throws Exception { 
    return df.format(date); 
    } 
} 

後:

public class DateAdapter implements Transform<Date> { 
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

    @Override 
    public Date read(String date) throws Exception { 
    return df.parse(date); 
    } 

    @Override 
    public String write(Date date) throws Exception { 
    return df.format(date); 
    } 
} 

我認爲我做了轉換錯誤的,因爲我現在越來越無法解析日期錯誤。奇怪的是,即使我把讀取和寫入方法中的if-else或try-catch塊仍然存在錯誤。

因此,我認爲主要的問題是,我該如何正確地寫一個適配器,如JAXB之一馬歇爾/和解組從XML字符串和Date對象之間。

+0

你得到的錯誤究竟是什麼,以及在哪裏?您可能需要粘貼堆棧跟蹤。 – Ladlestein 2010-09-14 17:49:57

回答

0

我解決了這個問題。它與我自己開發的API無關,而是在實際XML框架解組時將double轉換爲日期。存儲在XML中的double以秒爲單位處於Epoch時間,小數爲毫秒。 SimpleXML似乎無法正確處理小數。我的解決方法是隻需要一個double,而不是將數據解組到Date中。所以,我擺脫了整個適配器,只是改變

@Element(name="created", required=false) 
private Date created; 

@Element(name="created", required=false) 
private double created; 

我敢肯定,有一個與簡單的方式將其轉換成事實後一個日期,但我想最好是保持原樣。