У меня есть база данных Lotus Notes, которая выполняет некоторое взаимодействие с удаленным веб-сервисом. Я написал специальный класс Java для взаимодействия.
Методы класса могут быть выполнены из одного из трех местоположений в зависимости от пользовательской настройки:
- В библиотеке Java script, вызванной с помощью агента Java Lotus Notes
- В файле JAR, расположенном в каталоге пользователя "jvm/lib/ext"
- В файле JAR, расположенном в пользовательском каталоге в каталоге пользователя "jvm/lib" (например, "jvm/lib/custom_dir" ). JVM Lotus Notes знает о настраиваемом каталоге с использованием локальной переменной notes.ini "JavaUserClassesExt".
В моем классе я просто хотел бы вернуть место, из которого выполняется текущий класс. Поэтому, если он выполняется либо из варианта 2, либо из 3-го варианта, а затем возвращает путь к файлу JAR. Если он выполнит из опции 1, верните что-то еще, что я могу обработать.
Я пробовал следующее.
метод getProtectionDomain()
getClass().getProtectionDomain().getCodeSource().getLocation()
Результат:
java.security.AccessControlException: Access denied (java.lang.RuntimePermission getProtectionDomain)
Невозможно изменить какие-либо параметры безопасности для любых клиентов, выполняющих это.
Метод Class.getResource
String myName = "/" + getClass().getName().replace('.', '/') + ".class";
URL myResourceURL = getClass().getResource(myName);
Результат: myResourceURL ВСЕГДА null.
Метод ClassLoader.getResource
String myName2 = getClass().getName().replace('.', '/') + ".class";
ClassLoader myCL = getClass().getClassLoader();
URL myResourceURL2 = myCL.getResource(myName);
Результат: myResourceURL2 ВСЕГДА пусто.
a) Где я ошибаюсь выше?
и
b) Как получить местоположение текущего исполняемого класса с помощью другого метода?