【问题标题】:How to generate class with field of type Date from xs:string element with JAXB如何使用 JAXB 从 xs:string 元素生成日期类型字段的类
【发布时间】:2012-06-05 16:28:36
【问题描述】:

我有无法更改的 xsd 架构文件。
这是我的问题的摘录:

<xs:element name="Event" maxOccurs="unbounded">
    <xs:complexType>
        <xs:all>
            <xs:element name="EventDate" type="xs:string" minOccurs="0">
...

这是我为 EventDate 获得的字符串数据示例:

2012-05-30T12:30:00 CEST

我正在使用 xjc 进行编译,我得到了带有字符串字段的 Event 类。
有没有办法获得带有某种日期字段的事件类?
我想我应该写一些适配器,这没关系,但我不知道如何告诉 xjc 只在 EventDate 元素上使用它。

【问题讨论】:

    标签: datetime jaxb xml-parsing jaxb2 xjc


    【解决方案1】:

    您可以使用 'XmlAdapter' 。它支持此功能。

    【讨论】:

    • 好的,但是如何告诉 xjc 只在 Event klass 中的 xs:string 上使用它?
    • 请编辑您的答案,以便我可以撤消我的反对意见。出于某种原因,如果未编辑答案,我将无法撤消投票。
    【解决方案2】:

    我正在编译:

    xjc -b temp.xml schema.xsd
    

    这是 temp.xml 的一部分:

        <jaxb:bindings node="//xs:element[@name='EventDate']">
            <jaxb:property>
                <jaxb:baseType>
                    <javaType name="java.util.Date"
                        parseMethod="com.mydomain.adapters.DateAdapter.parseDate"
                        printMethod="com.mydomain.adapters.DateAdapter.printDate"
                    />
                </jaxb:baseType>
            </jaxb:property>
        </jaxb:bindings>
    

    这里是 com.mydomain.adapters.DateAdapter 类的一部分:

    private static final DateFormatter df = new DateFormatter("yyyy-MM-dd'T'HH:mm:ss z");
    public static Date parseDate(String v) {
        Date date = null;
        try {
            date = df.parse(v, Locale.getDefault());
        } catch (ParseException e) {
            throw new MyException("Could not parse date:" + v);
        }
        return date;
    }
    
    public static String printDate(Date v) {
        return df.print(v, Locale.getDefault());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      相关资源
      最近更新 更多