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 に答える