Nepoužívejte kalendář JAX-RPC a další datové typy dat

Toto pravidlo označuje odkazy na kterýkoli z následujících typů schémat: 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

Tyto typy schémat a jejich typy Java související s JAX-RPC java.util.String a java.util.Calendar nejsou podporovány JAX-WS.
Migrace na JAX-WS a JAXB bude vyžadovat použití těchto typů schémat s podporovaným typem Java javax.xml.datatype.XMLGregorianCalendar místo toho.

Příklad třídy JAX-RPC Calendar vypadá takto:

import java.util.Calendar ;
import java.rmi.RemoteException;
    
veřejný kalendář calculateShippingDate(Calendar requestedDate kalendáře ) vyvolá RemoteException; {
    // Nastavte datum na datum, které nám bylo zasláno, a přidejte 7 dní.
    requestedDate .add( java.util.Calendar.DAY_OF_MONTH , 7);
    // . . .
    
     requestedDate;     
    }

Příklad třídy JAX-WS XMLGregorianCalendar vypadá takto:

import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
    
public XMLGregorianCalendar calculateShippingDate(
    XMLGregorianCalendar requestedDate) {
    zkuste {
        // Vytvořte továrnu na datové typy.
        DatatypeFactory df = DatatypeFactory.newInstance( );
        // Nastavte datum na datum, které nám bylo zasláno, a přidejte 7 dní.
        Trvání trvání = df.newDuration("P7D" );
        requestedDate .add(duration);
    } catch ( DatatypeConfigurationException e) {
        // Automaticky generovaný blok úlovků TODO
        e.printStackTrace();
        }
        // . . .
    
         requestedDate;
    }

Jak můžete vidět z příkladu výše, vstupní parametr se od typu mění java.util.Calendar do javax.xml.datatype.XMLGregorianCalendar .
Důvodem je, že WSDL specifikoval tyto parametry jako typ, xsd:dateTime , JAX-RPC mapuje tento datový typ na java.util.Calendar , zatímco JAX-WS a JAXB jej mapují javax.xml.datatype.XMLGregorianCalendar .