Я могу придумать следующие варианты, ни один из них не идеален:
Как уже упоминалось @Konrad, вы можете попробовать переписать свой инструмент LDAP, чтобы использовать javax.naming.ldap
API. Если это работает, это (IMO) наиболее «перспективное» решение, но нет никаких сомнений в том, что это будет значительным усилием по кодированию.
Проблема заключается в том, что javax.naming.ldap
API, скорее всего, не предоставляют необходимую вам функциональность LDAP. Вероятно, именно поэтому ваш инструмент LDAP использует «внутренние» интерфейсы в первую очередь. В этом случае перенос инструмента для использования javax.naming.ldap
API недопустим.
Найдите / выберите альтернативный Java LDAP API и перепишите свой инструмент LDAP, чтобы использовать его. В отличие от предыдущего варианта, этот вариант является жизнеспособным.
Некоторые возможные альтернативные библиотеки LDAP перечислены здесь: https://directory.apache.org/api/java-api.html
Загрузите исходное дерево OpenJDK для последней версии LTS JDK (в настоящее время Java 11). Затем извлеките исходное дерево для классов com.sun.jndi.ldap.*
и выполните рефакторинг кода, используя вашу любимую IDE для переименования пакетов.
Базы кода OpenJDK лицензируются по «GPLv2 с исключением Classpath». Насколько я понимаю, если строго соблюдать требования GPLv2, вам будет разрешено распространять модифицированную версию дерева на тех же условиях лицензии. Однако Я не юрист. Вам следует обратиться за советом к юристу.
Недостатками этого подхода являются:
- возможный юридический риск,
- теперь вам нужно поддерживать параллельную кодовую базу с той, что в OpenJDK, и
- вероятность того, что Oracle может радикально пересмотреть или удалить классы из дерева исходных текстов OpenJDK.
Переключитесь на использование другого инструмента LDAP, написанного кем-то другим, на основе лучшей (более открытой) библиотеки LDAP. Запишите свою текущую кодовую базу. Вероятно, это наиболее экономичное решение вашей проблемы технического долга.
Кроме того, вы можете просто проигнорировать предупреждения и продолжить текущий подход. Инструмент может стать непригодным для использования в будущем, но это еще не произошло (Java 11) и может никогда не произойти.
Если ваша настоящая цель состоит в том, чтобы просто «убрать предупреждения», чтобы достичь какой-то цели качества кода, навязанной самим себе или руководством, то есть (IMO) пустая трата времени и ресурсов. Просто игнорируйте предупреждения и примите меры, чтобы сделать качественную цель более реалистичной. (Если вы можете объяснить руководству, что эти предупреждения состоят из нескольких человеко-месяцев, они должны принять правильное решение.)
Мне неизвестна API-совместимая альтернатива com.sun.jndi.ldap.*
, доступная с исходным кодом.