Datetime 如何使用JAXB从xs:string元素生成具有日期类型字段的类

Datetime 如何使用JAXB从xs:string元素生成具有日期类型字段的类,datetime,jaxb,xml-parsing,jaxb2,xjc,Datetime,Jaxb,Xml Parsing,Jaxb2,Xjc,我有无法更改的xsd架构文件。 下面是一段让我感到困扰的摘录: <xs:element name="Event" maxOccurs="unbounded"> <xs:complexType> <xs:all> <xs:element name="EventDate" type="xs:string" minOccurs="0"> ... 我用xjc编译,得到了带有字符串字段的事件类。 有没有一种方

我有无法更改的xsd架构文件。
下面是一段让我感到困扰的摘录:

<xs:element name="Event" maxOccurs="unbounded">
    <xs:complexType>
        <xs:all>
            <xs:element name="EventDate" type="xs:string" minOccurs="0">
...
我用xjc编译,得到了带有字符串字段的事件类。
有没有一种方法可以获取带有某种日期字段的事件类?

我想我应该编写某种适配器,这没关系,但我不知道如何告诉xjc仅在EventDate元素上使用它。

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

我正在使用以下工具进行编译:

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>

好的,但是如何告诉xjc在klass事件中只在xs:string上使用它呢?请编辑您的答案,这样我就可以撤消我的否决票了。由于某些原因,若答案未经编辑,我无法撤消投票。
    <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>
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());
}