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
.