2012-06-25 74 views
1

我们有5个xsd文件,first.xsd,second.xsd,third.xsd等等。如何为JAXB绑定自定义Getter和Setter方法

我们希望在每个xsd文件中定义的dateTime类型中使用Calendar,但first.xsd除外。

<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> 

我们打算用这篇文章来告诉JAXB每当我们在我们的XSD文件使用日期时间来生成日历。但是,我们要使用的XMLGregorianCalendar为我们在first.xsd定义Java类型:

... 
<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文件中有一个特殊的getter setter方法:

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将创建设置一个getter setter方法,并返回一个com.time.XMLGregorianCalendar。但事实并非如此。

有谁知道我应该用什么来告诉JAXB使用javax.xml.datatype.XMLGregorianCalendar作为我的类中的getter和setter方法吗?

谢谢。

回答

0

删除限制,您的代码将在下面。

<xsd:simpleType name="myDateType" type="xsd:dateTime"> 
</xsd:simpleType> 
+0

回复此问题 –