5つのxsdファイル、first.xsd、second.xsd、third.xsdなどがあります。
first.xsdを除くすべてのxsdファイルで定義されているdateTimeタイプにCalendarを使用します。
<jaxb:globalBindings>
<jaxb:javaType name="java.util.Calendar" xmlType="xsd:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>
<jaxb:serializable/>
</jaxb:globalBindings>
このエントリを使用する意図は、xsdファイルでdateTimeを使用しているときはいつでも、JAXBにカレンダーを生成するように指示することでした。ただし、first.xsdで定義するJavaタイプにはXMLGregorianCalendarを使用します。
...
<xsd:simpleType name="myDateType">
<xsd:restriction base="xsd:dateTime">
</xsd:restriction>
</xsd:simpleType>
...
これを実現するために、jaxbBindingファイルに次のエントリを追加します。
<jaxb:bindings schemaLocation="first.xsd">
<jaxb:bindings node="xsd:simpleType[@name='myDateType']">
<jaxb:class name="XMLGregorianCalendar" implClass="javax.xml.datatype.XMLGregorianCalendar" />
<jaxb:schemaBindings>
<jaxb:package name="javax.xml.datatype"/>
</jaxb:schemaBindings>
</jaxb:bindings>
</jaxb:bindings>
生成されたJavaファイルには、独特のゲッターセッターメソッドがあることがわかります。
package com.time;
public class MyClass{
@XmlElement(name = "MyDate", required = true)
protected XMLGregorianCalendar sentenceDate;
public com.time.XMLGregorianCalendar getMyDate() {
return myDateType;
}
public void setMyDate(com.time.XMLGregorianCalendar value) {
return this.myDateType = (com.time.XMLGregorianCalendar)value;
}
JAXBは、com.time.XMLGregorianCalendarを設定して返すゲッターセッターメソッドを作成することを期待しています。しかし、そうではありません。
クラスのgetterメソッドとsetterメソッドにjavax.xml.datatype.XMLGregorianCalendarを使用するようにJAXBに指示するために何を使用すればよいか知っている人はいますか?
ありがとうございました。