При сериализации классов стандартной библиотеки Java (таких как java.awt.Rectangle, Point, Dimension и т. д.) с использованием таких платформ, как XStream, Jackson или Gson, я вынужден использовать флаги --add-opens:
Код: Выделить всё
--add-opens java.desktop/java.awt=ALL-UNNAMED
Код: Выделить всё
module my.app {
requires java.desktop; // Not sufficient for reflection!
}
Я не могу открыть пакеты другого модуля из моего модуля-info.java — это может сделать только модуль-владелец. Директива opens работает только для ваших собственных пакетов:
Код: Выделить всё
module my.app {
opens my.package to com.thoughtworks.xstream; // ✓ Works for MY packages
requires java.desktop; // ✗ Doesn't open THEIR packages
}
Почему это важно
- — кошмар для обслуживания.[/b] – Необходимо отслеживать все затронутые модули во всех версиях JDK.
Код: Выделить всё
--add-opens - Решение, предназначенное только для выполнения. Не может быть объявлено в коде, его трудно обнаружить при отсутствии.
- Классы стандартной библиотеки не являются экзотикой. – Это обычные, стабильные общедоступные API (, Color, File и т. д.)
Код: Выделить всё
Rectangle - Влияет на все платформы на основе отражения – не только сериализация, но также ORM, платформы тестирования и т. д.
- Существует ли комплексная библиотека, предоставляющая преобразователи/адаптеры сериализации для обычного JDK классы? Специально ищете преобразователи XStream, но также заинтересованы в решениях для Jackson/Gson.
- Почему JDK не предоставляет «дружественный к сериализации» модуль, который явно открывает эти стабильные классы для отражения? Что-то вроде java.desktop.reflection, которое может потребоваться дополнительно?
- Есть ли какие-либо предложения или JEP, устраняющие это противоречие между модулями и отражением?
- DTO/классы-оболочки - тоже много шаблонов для десятков классов JDK
- Пользовательские преобразователи – работает, но требует написания преобразователей для каждого сериализуемого класса JDK
- Использование XStream для сериализации конфигурации
- Необходимость сериализации сложных графов объектов, содержащих классы геометрии AWT
- Java 17+, модульное приложение
Подробнее здесь: https://stackoverflow.com/questions/798 ... s-is-there
Мобильная версия