2

我有无法更改的 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 进行编译,并获得带有 String 字段的 Event 类。
有没有办法获得带有某种日期字段的事件类?
我想我应该编写某种适配器,这没关系,但我不知道如何告诉 xjc 仅在 EventDate 元素上使用它。

4

2 回答 2

1

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

于 2012-06-05T16:47:38.960 回答
0

我正在编译:

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());
}
于 2012-06-15T13:11:22.167 回答