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 .