【问题标题】:How do I annotate a JAXB property to use xsd:time rather than xsd:datetime?如何注释 JAXB 属性以使用 xsd:time 而不是 xsd:datetime?
【发布时间】:2010-12-15 10:36:03
【问题描述】:

我有一个这样的 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:timexsd:time 映射到 XmlGregorianCalendar,但反向映射映射到 xsd:anySimpleType,这不是很有帮助。

我尝试了@XmlElement(type=...) 的各种参数,但无济于事。任何指针将不胜感激。

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

【问题讨论】:

  • 我不清楚你是想从XSD生成Java,还是从java生成XSD?
  • @skaffman:来自 java 的 xsd
  • 如果您想将startTime 保留为Date 类型,请查看此post。它定义了DateString 之间的映射,用于序列化实际的Date 类型。

标签: java xsd types jaxb jax-ws


【解决方案1】:

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

【讨论】:

  • 看起来不错。我完全错过了 XmlSchemaType (也许因为在注释的 jax-ws 文档中没有提到它:jax-ws.dev.java.net/jax-ws-ea3/docs/annotations.html 我现在唯一的问题是将 Date 转换为 XMLGregorianCalendar - 考虑到 Java 的 Date 是多么的病态,这并不容易处理是。
  • 感谢您的所有帮助。这对于 setStartTime() 的第一行会更好: Calendar gc = GregorianCalendar.getInstance();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2012-03-29
  • 2018-07-20
相关资源
最近更新 更多