Как конвертировать java.util.Date в XMLGregorianCalendar - PullRequest
1 голос
/ 21 июня 2019

Я конвертирую SOAP WS в REST WS для клиента. Теперь в объекте типа данных есть поле, тип возвращаемого значения XMLGregorianCalendar.

Поскольку мне нужно сохранить структуру ввода / вывода одинаковой, я не могу изменить имена переменных, а также их тип возвращаемого значения.

В Rest WS мы используем объекты json в качестве возврата.

Процесс: - Мы отправили ввод в dto, а затем вызвали процедуру, получили ответ от процедуры в формате java.util.date. Теперь мне нужно изменить этот java.util.date (Numbers) на Date, имеющий тот же формат, что и XMLGregorianCalendar.

Заранее спасибо за помощь.

Я попробовал следующий код.

изменен тип возвращаемого значения переменной DTO на java.util.Date

private Date informeFechaDlgncmnto;

@JsonSerialize(using = JsonDateTimeSerializer.class)
public Date getInformeFechaDlgncmnto() {
    return informeFechaDlgncmnto;
}

public void setInformeFechaDlgncmnto(Date informeFechaDlgncmnto) {
    this.informeFechaDlgncmnto = informeFechaDlgncmnto;
}

JsonDateTimeSerializer Class

private static final SimpleDateFormat formatter = new SimpleDateFormat(
        "yyyy-MM-dd'T'HH:mm:ss.SSS");

@Override
public void serialize(Date date, JsonGenerator gen,
        SerializerProvider provider) throws IOException,
        JsonProcessingException {

    String formattedDate = formatter.format(date);

    gen.writeString(formattedDate);
}

Токовый выход для REST WS: -

"informeFechaDlgncmnto": "2019-04-09T12: 20: 44.000",

SOAP WS Code

переменная в DTO

@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar informeFechaDlgncmnto;

public XMLGregorianCalendar getInformeFechaDlgncmnto() {
    return informeFechaDlgncmnto;
}

public void setInformeFechaDlgncmnto(XMLGregorianCalendar value) {
    this.informeFechaDlgncmnto = value;
}

Код для изменения в gregorianCalendar в Servicelayer

private ConsultaFuratRespType addTZInformeFechaDlgncmnto(
        ConsultaFuratRespType consultaFuratRespType) {
    try {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
        "yyyy-MM-dd'T'HH:mm:ss.SSS");

        simpleDateFormat.setTimeZone(TimeZone
                .getTimeZone("UTC-0700";));

        Calendar gregorianCalendar = new GregorianCalendar(
                TimeZone.getTimeZone("UTC-0700";));

        gregorianCalendar = consultaFuratRespType.getData().getDatosFurat()
                .getInformeFechaDlgncmnto().toGregorianCalendar();

        String gregorianCalendarString = simpleDateFormat
                .format(gregorianCalendar.getTime());

        Date date = simpleDateFormat.parse(gregorianCalendarString);

        GregorianCalendar gregCalInformeFechaDlgncmnto = new GregorianCalendar(
                TimeZone.getTimeZone(ConstantesApp.TIMEZONE_UTC_MINUS_5000));

        gregCalInformeFechaDlgncmnto = (GregorianCalendar) GregorianCalendar
                .getInstance();

        gregCalInformeFechaDlgncmnto.setTime(date);

        consultaFuratRespType.getData().getDatosFurat()
                .setInformeFechaDlgncmnto(gregCalInformeFechaDlgncmnto);

        return consultaFuratRespType;
    } catch (DatatypeConfigurationException e) {
        return consultaFuratRespType;
    } catch (Exception e) {
        return consultaFuratRespType;
    }

Вывод в SOAPUI

2019-04-09T12: 20: 44.0-05: 00

Вывод должен быть таким же.

Токовый выход: -

SOAP WS: - 2019-04-09T12: 20: 44.0-05: 00

REST WS: - 2019-04-09T12: 20: 44.000

...