JAXBがxsd:dateTimeをマーシャルするときに使用される日付形式をどのように指定しますか?



How Do You Specify Date Format Used When Jaxb Marshals Xsd



解決:

あなたは使用することができますXmlAdapterを使用して、日付型をXMLに書き込む方法をカスタマイズします。

パッケージcom.example; import java.text.SimpleDateFormat; import java.util.Date; import javax.xml.bind.annotation.adapters.XmlAdapter; public class DateAdapter extends XmlAdapter {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)保護された日付のタイムスタンプ;

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

  

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




SimpleDateFormatを使用して、次の例のようにXMLGregorianCalendarを作成します。

public static XMLGregorianCalendar getXmlDate(Date date)throws DatatypeConfigurationException {return DatatypeFactory.newInstance()。newXMLGregorianCalendar(new SimpleDateFormat( 'yyyy-MM-dd')。format(date)); } public static XMLGregorianCalendar getXmlDateTime(Date date)throws DatatypeConfigurationException {return DatatypeFactory.newInstance()。newXMLGregorianCalendar(new SimpleDateFormat( 'yyyy-MM-dd'T'HH:mm:ss')。format(date)); }

最初のメソッドは、XMLマーシャラーによって有効なxsd:dateとしてフォーマットされたXMLGregorianCalendarのインスタンスを作成し、2番目のメソッドは有効なxsd:dateTimeになります。


私にとって非常に簡単な方法。 JavaでマーシャリングするためのXMLGregorianCalendarのフォーマット。



データを適切な形式で作成するだけです。 NStoStringが呼び出され、良好な結果が得られます。

public static final XMLGregorianCalendar getDate(Date d){try {return DatatypeFactory.newInstance()。newXMLGregorianCalendar(new SimpleDateFormat( 'yyyy-MM-dd')。format(d)); } catch(DatatypeConfigurationException e){nullを返す; }}