不要使用 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 日曆類別的範例如下所示:

import java.util.Calendar;
import java.rmi.RemoteException;
    
public Calendar calculateShippingDate(Calendar requestedDate) throws RemoteException; {
    // Set the date to the date that was sent to us and add 7 days.
    requestedDate.add(java.util.Calendar.DAY_OF_MONTH, 7);
    // . . .
    
    return requestedDate;     
    }

JAX-WS XMLGregorianCalendar類別的範例如下所示:

import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
    
public XMLGregorianCalendar calculateShippingDate(
    XMLGregorianCalendar requestedDate) {
    try {
        // Create a data type factory.
        DatatypeFactory df = DatatypeFactory.newInstance();
        // Set the date to the date that was sent to us 和 再加上 7 天。
        Duration duration = df.newDuration("P7D");
        requestedDate.add(duration);
    } catch (DatatypeConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        // . . .
    
        return requestedDate;
    }

從上面的範例可以看到,輸入參數的類型從 java.util.Calendar 收件者 javax.xml.datatype.XMLGregorianCalendar .
這是因為 WSDL 指定這些參數的類型、 xsd:dateTime , JAX-RPC 將此資料類型映射為 java.util.Calendar ,而 JAX-WS 和 JAXB 將其映射為 javax.xml.datatype.XMLGregorianCalendar .