Nie używaj kalendarza JAX-RPC i innych typów danych daty

Ta reguła oznacza odwołania do dowolnego z następujących typów schematów: 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

Te typy schematów i powiązane z nimi typy Java JAX-RPC java.util.String oraz java.util.Calendar nie są obsługiwane przez JAX-WS.
Migracja do JAX-WS i JAXB będzie wymagała użycia tych typów schematów z obsługiwanym typem Java javax.xml.datatype.XMLGregorianCalendar Zamiast.

Przykład klasy kalendarza JAX-RPC wygląda następująco:

import java.util.Calendar ;
importuj java.rmi.RemoteException;
    
publiczny Kalendarz calculateShippingDate(Calendar requestedDate ) wyrzuca RemoteException; {
    // Ustaw datę na datę, która została nam wysłana i dodaj 7 dni.
    requestedDate .add( java.util.Calendar.DAY_OF_MONTH , 7);
// . . .
    
     requestedDate;     
}

Przykład klasy JAX-WS XMLGregorianCalendar wygląda następująco:

import javax.xml.datatype.XMLGregorianCalendar;
importuj javax.xml.datatype.DatatypeConfigurationException;
    
publiczny XMLGregorianCalendar calculateShippingDate(
    XMLGregorianCalendar requestedDate) {
spróbuj {
// Utwórz fabrykę typów danych.
        DatatypeFactory df = DatatypeFactory.newInstance( );
        // Ustaw datę na datę, która została nam wysłana i dodaj 7 dni.
Czas trwania duration = df.newDuration("P7D" );
        requestedDate .add(duration);
catch ( DatatypeConfigurationException e) {
        // TODO Automatycznie wygenerowany blok catch
        e.printStackTrace();
​        
// . . .
    
        żądanie requestedDate;
}

Jak widać w powyższym przykładzie, parametr wejściowy uległ zmianie w stosunku do typu java.util.Calendar do javax.xml.datatype.XMLGregorianCalendar .
Dzieje się tak, ponieważ w dokumencie WSDL określono, że te parametry są typu xsd:dateTime , JAX-RPC mapuje ten typ danych na java.util.Calendar podczas gdy JAX-WS i JAXB mapują go do javax.xml.datatype.XMLGregorianCalendar .