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

導入java.util.Calendar ;
import java.rmi.RemoteException;
    
公共日曆calculateShippingDate(CalendarrequestedDate )拋出RemoteException; {
    // 將日期設定為發送給我們的日期並新增 7 天。
    requestedDate .add( java.util.Calendar.DAY_OF_MONTH , 7);
    // . 。 。
    
    返回requestedDate;     
    }

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

導入javax.xml.datatype.XMLGregorianCalendar;
導入javax.xml.datatype.DatatypeConfigurationException;
    
public XMLGregorianCalendar calculateShippingDate(
    XMLGregorianCalendar requestedDate) {
    嘗試{
        //建立資料類型工廠。
        DatatypeFactory df = DatatypeFactory.newInstance( );
       //將日期設定為發送給我們的日期並新增 7 天。
       持續時間 = df.newDuration("P7D" );
        requestedDate .add(duration);
    } catch ( DatatypeConfigurationException e) {
       // TODO 自動產生的 catch 區塊
        e.printStackTrace();
       }
      // . 。 。
    
       回傳requestedDate;
    }

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