Изменение поля даты при загрузке дооснащения - PullRequest
0 голосов
/ 23 октября 2018

Я использую Retrofit2 для загрузки SOAP-запроса.Дата автоматически изменяется в процессе загрузки в 10 из 1000 запросов.Я много исследовал и точно определил проблему, когда начал регистрировать вызов с помощью перехватчика.

Log Printed before interceptor
fromTime:2018-10-13T13:22:00
isDeleted:false
name:Unknown visitor
reason:Unknown reason
toTime:2018-10-13T23:59:59
vrm:ABC


Log Printed in Interceptor.
FromTime:2018-10-20T11:59:00
Name:Unknown visitor
Reason:Unknown reason
ToTime:2018-10-13T23:59:59
Vrm:ABC
isDeleted:false

Это видно из Time: 2018-10-13T13: 22: 00 изменяется на FromTime: 2018-10-20T11: 59: 00.

Запрос на сборку выглядит следующим образом

public EnvelopeSender build() {
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new EnvelopInterceptor()).build();
        Retrofit retrofit = new Retrofit.Builder().client(client)
                .baseUrl(url)
                .addConverterFactory(SimpleXmlConverterFactory.create(serializer))
                .addCallAdapterFactory(SynchronousCallAdapterFactory.create())
                .build();
        return retrofit.create(EnvelopeSender.class);
    }

Фабрика сериализации выглядит следующим образом.

открытый класс XMLSerializerFactory {

private Strategy strategy;
private DateFormat format;
private RegistryMatcher registryMatcher;

public Serializer getSerializer() {
    if (strategy == null && registryMatcher == null) {
        return new Persister();
    } else if (strategy == null) {
        return new Persister(registryMatcher);
    } else if (registryMatcher == null) {
        return new Persister(strategy);
    } else {
        return new Persister(strategy, registryMatcher);
    }
}

public XMLSerializerFactory withStrategy() {
    strategy = new AnnotationStrategy();
    return this;
}

public XMLSerializerFactory withDateFormat() {
    format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.UK);
    return this;
}

public XMLSerializerFactory withRegistryMatcher() {
    if (format == null)
        format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.UK);

    registryMatcher = new RegistryMatcher();
    registryMatcher.bind(Date.class, new DateFormatTransformer(format));
    return this;
}

}

public class DateFormatTransformer implements Transform<Date> {
    private DateFormat dateFormat;

    public DateFormatTransformer(DateFormat dateFormat) {
        this.dateFormat = dateFormat;
    }

    @Override
    public Date read(String value) throws Exception {
        return dateFormat.parse(value);
    }

    @Override
    public String write(Date value) throws Exception {
        return dateFormat.format(value);
    }

}

Это ошибка или я что-то не так делаю?

Заранее спасибо.

...