该规则标记对以下任何模式类型的引用:
http://www.w3.org/2001/XMLSchema:duration, http://www.w3.org/2001/XMLSchema:dateTime,
http://www.w3.org/2001/XMLSchema:time, http://www.w3.org/2001/XMLSchema:date,
http://www.w3.org/2001/XMLSchema:gYearMonth, http://www.w3.org/2001/XMLSchema:gYear, NAMESPACE:gMonth,
http://www.w3.org/2001/XMLSchema:gDay
这些模式类型及其与 JAX-RPC 相关的Java类型
java.util.String
和
java.util.Calendar
不被 JAX-WS 支持。
迁移到 JAX-WS 和 JAXB 将需要
使用这些模式类型和支持的Java类型
javax.xml.datatype.XMLGregorianCalendar
。
JAX-RPC Calendar 类的示例如下:
导入java.util.Calendar
import java.rmi.RemoteException;
public CalendarcalculateShippingDate(Calendar requestedDate) throwsRemoteException;{
// 将日期设置为发送给我们的日期,并加上 7 天。
requestedDate.addjava.util.Calendar.DAY_OF_MONTH, 7);
// . .
returnrequestedDate;
}
JAX-WSXMLGregorianCalendar类的示例如下:
importjavax.xml.datatype.XMLGregorianCalendar;
导入javax.xml.datatype.DatatypeConfigurationException;
public XMLGregorianCalendar calculateShippingDate(
XMLGregorianCalendar requestedDate) {
try {
// 创建数据类型工厂。
DatatypeFactorydf =DatatypeFactory.newInstance();
// 将日期设置为发送给我们的日期,并加上 7 天。
加 7 天。
Duration duration =df.newDuration("P7D");
requestedDate.add(duration);
} catchDatatypeConfigurationExceptione) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
// . . .
returnrequestedDate;
}
从上面的示例中可以看出,输入参数的类型从
java.util.Calendar
至
javax.xml.datatype.XMLGregorianCalendar
.
这是因为 WSDL 指定了这些参数的类型、
xsd:dateTime
,JAX-RPC 将此数据类型映射为
java.util.Calendar
而 JAX-WS 和 JAXB 则将其映射为
javax.xml.datatype.XMLGregorianCalendar
.