请勿使用 JAX-RPC 日历和其他日期数据类型

该规则标记对以下任何模式类型的引用: 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 .