代码之家  ›  专栏  ›  技术社区  ›  Draemon

如何注释JAXB属性以使用xsd:time而不是xsd:datetime?

  •  6
  • Draemon  · 技术社区  · 16 年前

    我有一个这样的JAXB课程:

    public class Game {
        private Date startTime;
    
        @XmlElement
        public Date getStartTime() {
            return startTime;
        }
    
        public void setStartTime(Date startTime) {
            this.startTime = startTime;
        }
    }
    

    结果是 .xsd 其中starttime具有类型 xsd:datetime .我想要它 xsd:time . XSD:时间 地图到 XmlGregorianCalendar ,但反向映射映射到 xsd:anySimpleType 这没什么帮助。

    我试过各种各样的论点 @XmlElement(type=...) 无济于事。任何指点都会非常感激。

    如果有区别,这是JAX-WS使用的一种类型。

    1 回复  |  直到 16 年前
        1
  •  6
  •   David Rabinowitz    16 年前

    如果您正在从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);
        }
    }