1

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に指示するために何を使用すればよいか知っている人はいますか?

ありがとうございました。

4

1 に答える 1

0

制限を解除すると、コードは次のようになります。

 <xsd:simpleType name="myDateType" type="xsd:dateTime">
 </xsd:simpleType>
于 2012-06-25T07:04:55.193 に答える