91

JAXB が日付オブジェクト ( XMLGregorianCalendar) を xsd:dateTime 要素にマーシャリングするとき。結果の XML の形式をどのように指定できますか?

例: デフォルトのデータ形式はミリ秒を使用します<StartDate>2012-08-21T13:21:58.000Z</StartDate> が、ミリ秒を省略する必要があります。 <StartDate>2012-08-21T13:21:58Z</StartDate>

使用する出力フォーム/日付形式を指定するにはどうすればよいですか? javax.xml.datatype.DatatypeFactoryオブジェクトの作成に使用していXMLGregorianCalendarます。

XMLGregorianCalendar xmlCal = datatypeFactory.newXMLGregorianCalendar(cal);
4

5 に答える 5

134

を使用しXmlAdapterて、日付型を XML に書き込む方法をカスタマイズできます。

package com.example;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class DateAdapter extends XmlAdapter<String, Date> {

    private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    public String marshal(Date v) throws Exception {
        synchronized (dateFormat) {
            return dateFormat.format(v);
        }
    }

    @Override
    public Date unmarshal(String v) throws Exception {
        synchronized (dateFormat) {
            return dateFormat.parse(v);
        }
    }

}

次に、@XmlJavaTypeAdapterアノテーションをXmlAdapter使用して、特定のフィールド/プロパティに使用する必要があることを指定します。

@XmlElement(name = "timestamp", required = true) 
@XmlJavaTypeAdapter(DateAdapter.class)
protected Date timestamp; 

xjb バインディング ファイルの使用:

<xjc:javaType name="java.util.Date" xmlType="xs:dateTime"
        adapter="com.example.DateAdapter"/>

上記の注釈が生成されます。
(最終的にxjc名前空間を追加することにより: xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc")

于 2012-11-26T17:04:31.027 に答える