2009-11-11 53 views
6

我有一個JAXB類這樣的:如何註釋JAXB屬性以使用xsd:time而不是xsd:datetime?

public class Game { 
    private Date startTime; 

    @XmlElement 
    public Date getStartTime() { 
     return startTime; 
    } 

    public void setStartTime(Date startTime) { 
     this.startTime = startTime; 
    } 
} 

這導致.xsd其中開始時間具有類型xsd:datetime。我希望它是xsd:timexsd:time映射到XmlGregorianCalendar,但反向映射映射到xsd:anySimpleType這不是非常有幫助。

我已經試過各種參數@XmlElement(type=...)無濟於事。任何指針將不勝感激。

如果有差別,這是通過JAX-WS使用的類型。

+0

我不清楚,如果你想從XSD生成的Java,或從Java生成XSD? – skaffman 2009-11-11 12:03:48

+0

@skaffman:從Java – Draemon 2009-11-11 12:44:48

+0

如果你想保持'startTime'爲'Date'類型爲xsd,看看這個[文章](http://stackoverflow.com/questions/2519432/jaxb-unmarshal-timestamp)。它定義了'Date'和'String'之間的映射,用於序列化實際的Date類型。 – kon 2013-01-24 09:55:32

回答

6

如果生成從這裏Java類的架構,你應該改變什麼:

public class Game { 
    private XMLGregorianCalendar startTime; 

    @XmlElement 
    @XmlSchemaType(name = "time") 
    public XMLGregorianCalendar getStartTimeForSchema() { 
     return startTime; 
    } 

    public void setStartTimeForSchema(XMLGregorianCalendar startTime) { 
     this.startTime = startTime; 
    } 

    @XmlTransient 
    public Date getStartTime() { 
     return startTime.toGregorianCalendar().getTime(); 
    } 

    @XmlTransient 
    public void setStartTime(Date startTime) { 
    GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance(); 
     gc.setTime(startTime); 
     DatatypeFactory dataTypeFactory = null; 
     try { 
     dataTypeFactory = DatatypeFactory.newInstance(); 
     } catch (DatatypeConfigurationException ex) { 
     // log 
     } 
     this.startTime = dataTypeFactory.newXMLGregorianCalendar(gc); 
    } 
} 
+0

看起來不錯。我已經完全錯過XmlSchemaType將(可能是因爲它在JAX-WS文檔註釋上沒有提到的:只有https://jax-ws.dev.java.net/jax-ws-ea3/docs/annotations.html 我現在的問題是一個'Date'轉換爲'XMLGregorianCalendar' - 不是那麼容易考慮到Java的日期處理是多麼瘋狂病態 – Draemon 2009-11-11 12:46:23

+0

我已經固定我的答案 – 2009-11-11 15:10:18

+0

感謝您的幫助 這將是第一線更好。 setStartTime():Calendar gc = GregorianCalendar.getInstance(); – Draemon 2009-11-11 16:59:00

相關問題