Как создать InitialDirContext в компоненте OSGi внутри felix (v603), работающем поверх jdk15
Я нахожусь в процессе обновления своего кода jdk8 до jdk15, и у меня работает большинство зависимостей и настроек конфигурации, но я борюсь с созданием нового InitialDirContext.
Мой компонент отправляет письмо и настраивает InitialDirContext для получения записей MX. Код работает нормально при запуске в качестве основного, т.е. создание со свойством "java.naming.factory.initial", установленным на "com.sun.jndi.dns.DnsContextFactory", работает нормально.
public static void main(String[] args) {
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
try {
InitialDirContext initialDirContext = new InitialDirContext(env);
Attributes attrs = initialDirContext.getAttributes("gmail.com", new String[]{"MX"});
Attribute attr = attrs.get("MX");
Set<String> hostNames = new HashSet<>();
if (attr != null) {
for (int i = 0; i < attr.size(); i++) {
String mxAttr = (String) attr.get(i);
String[] parts = mxAttr.split(" ");
hostNames.add(parts[1].substring(0, parts[1].length() - 1));
addIpAddresses(initialDirContext, parts[1], hostNames);
}
}
System.out.println("hostNames = " + hostNames.stream().sorted().collect(Collectors.joining(", ")));
} catch (NamingException e) {
e.printStackTrace(System.err);
}
}
Однако, когда я запускаю этот тип кода внутри felix, я получаю исключение:
Caused by: javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.jndi.dns.DnsContextFactory [Root exception is java.lang.IllegalAccessException: class javax.naming.spi.NamingManager (in module java.naming) cannot access class com.sun.jndi.dns.DnsContextFactory (in module jdk.naming.dns) because module jdk.naming.dns does not export com.sun.jndi.dns to module java.naming]
at java.naming/javax.naming.spi.NamingManager.getFactory(NamingManager.java:749)
at java.naming/javax.naming.spi.NamingManager.lambda$getInitialContext$1(NamingManager.java:711)
at java.base/jdk.internal.loader.AbstractClassLoaderValue$Memoizer.get(AbstractClassLoaderValue.java:329)
at java.base/jdk.internal.loader.AbstractClassLoaderValue.computeIfAbsent(AbstractClassLoaderValue.java:205)
at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:711)
at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305)
at java.naming/javax.naming.InitialContext.init(InitialContext.java:236)
at java.naming/javax.naming.InitialContext.<init>(InitialContext.java:208)
at java.naming/javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:130)
Я вижу, что модуль jdk.naming.dns на самом деле не экспортирует пакет com.sun.jndi.dns, но тогда как это возможно, что код работает в основном классе. Возможно, мне нужно добавить дополнительные настройки в мой файл felix config.properties?