Spring Batch Oracle TIMESTAMP Ошибка сериализации Джексона - PullRequest
0 голосов
/ 24 февраля 2020

Я использую средство чтения элементов подкачки JDB C, где один из ключей сортировки (submitdate) в поставщике запросов определен как столбец отметки времени в таблице Oracle. После миграции из Spring 3 в 4 (через Spring Boot 5.1) я получаю следующее исключение:

Причина: com.faster xml .jackson.databind.ex c .InvalidDefinitionException : Не найден сериализатор для класса java .io.ByteArrayInputStream и не обнаружены свойства для создания BeanSerializer (во избежание исключения отключите SerializationFeature.FAIL_ON_EMPTY_BEANS) (через цепочку ссылок: java .util.HashMap ["AbstractPagingItemReader.start.after" ]> java .util.LinkedHashMap ["" submitdate ""]> oracle. sql .TIMESTAMP ["stream"]) на com.faster xml .jackson.databind.ex c .InvalidDefinitionException .from (InvalidDefinitionException. java: 77) в com.faster xml .jackson.databind.SerializerProvider.reportBadDefinition (SerializerProvider. java: 1191) в com.faster xml .jackson.databind.DatabindContext.reportBad (DatabindContext. java: 313) на com.faster xml .jackson.databind.ser.impl.UnknownSerializer.failForEmpty (UnknownSerializer. java: 71) на com.faster xml .jackso n.databind.ser.impl.UnknownSerializer.serializeWithType (UnknownSerializer. java: 45) на com.faster xml .jackson.databind.ser.BeanPropertyWriter.serializeAsField (BeanPropertyWriter. java: 729) на com.faster. xml .jackson.databind.ser.std.BeanSerializerBase.serializeFields (BeanSerializerBase. java: 719) на com.faster xml .jackson.databind.ser.std.BeanSerializerBase.serializeWithType (BeanSerializerBase *: 10 *). 604) на com.faster xml .jackson.databind.ser.std.MapSerializer.serializeTypedFields (MapSerializer. java: 933) на com.faster xml .jackson.databind.ser.std.MapSerializer.serializeFields ( MapSerializer. java: 688) на com.faster xml .jackson.databind.ser.std.MapSerializer.serializeWithType (MapSerializer. java: 666) на com.faster xml .jackson.databind.ser. std.MapSerializer.serializeWithType (MapSerializer. java: 33) на com.faster xml .jackson.databind.ser.std.MapSerializer.serializeTypedFields (MapSerializer. java: 933) на com.faster xml. jackson.databind.ser.std.MapSerializer.serial izeFields (MapSerializer. java: 688) на com.faster xml .jackson.databind.ser.std.MapSerializer.serialize (MapSerializer. java: 639) на com.faster xml .jackson.databind. ser.std.MapSerializer.serialize (MapSerializer. java: 33) на com.faster xml .jackson.databind.ser.DefaultSerializerProvider._serialize (DefaultSerializerProvider. java: 480) на com.faster xml. jackson.databind.ser.DefaultSerializerProvider.serializeValue (DefaultSerializerProvider. java: 319) в com.faster xml .jackson.databind.ObjectMapper._configAndWriteValue (ObjectMapper. java: 3905) в com.faster * 1056. jackson.databind.ObjectMapper.writeValue (ObjectMapper. java: 3176) по адресу org.springframework.batch.core.repository.dao.Jackson2ExecutionContextStringSerializer.serialize (Jackson2ExecutionContextStringSerializer. * 78c. repository.dao.Jackson2ExecutionContextStringSerializer.serialize (Jackson2ExecutionContextStringSerializer. java: 50) в org.springframework.batch.core.repository.dao.Jd bcExecutionContextDao.serializeContext (JdbcExecutionContextDao. java: 299) ... пропущено 30 общих кадров

Я читал о переключении сериализатора по умолчанию с xstream на Джексона в качестве причины этого. Какие у меня варианты? Должен ли я go вернуться к использованию сериализатора xstream? Должен ли я написать Джексон oracle. sql .TIMESTAMP сериализатор? Последний вариант не очень хорош, так как Oracle Speci c потребует от меня распространять лицензированный JAR. Любое другое предложение?

1 Ответ

0 голосов
/ 25 февраля 2020

Я пошел с предоставленным решением здесь , так как oracle. sql .TIMESTAMP не предоставляет каких-либо публичных c методов получения / установки. Пришлось обновить пакет пружины до 4.2, так как сериализатор Jackson2 не открыт для настройки в 4.1 из-за до .

...