У нас есть приложение Java EE 7, работающее на WildFly 9, состоящее из развернутого развертывания EAR, которое содержит несколько файлов WAR, несколько JAR-файлов на уровне EAR и папку lib, содержащую 3-х парные JAR-файлы. (Я знаю, что это не так, как сегодня, но это так.) Одна из WAR содержит службу REST JAX-RS, которая ПОЛУЧАЕТ и POST-объект данных, который содержит Java 8 OffsetDateTime
, Поскольку JSON -B еще не доступен, мы использовали @JsonSerialize
/ @JsonDeserialize
form jackson-databind , чтобы маршалировать его от и до JSON.
Это работало достаточно хорошо до тех пор, пока из-за смены другой WAR зависимость jackson-jaxrs попала в папку lib на уровне EAR. Затем произошло то, что сортировка перестала работать, поскольку контейнер пытался установить строку даты из JSON непосредственно в тип OffsetDateTime
и при получении записывать все внутренние поля даты Java 8 вместо форматированная строка. Я предположил, что обработка вышеупомянутых аннотаций не состоялась, и поэтому сервер попытался отобразить это как другие простые типы. Когда я удалил JAR-файлы, принадлежащие зависимости jackson-jaxrs , все снова заработало нормально. Сервер приложений затем, вероятно, использовал свою собственную версию этого самого JAR-файла из своей папки модулей.
Итак, мой вопрос: в чем разница при наличии JAR-файла jackson-jaxrs в EARs lib папка дополнительно к системе предоставлен модуль или только последний? Почему он не учитывает аннотации в первом случае при де / сериализации?