2009-11-11 58 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