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方法吗?
谢谢。
回复此问题 –