Почему мне не удается разрешить общедоступные объекты Java в jython при использовании "из импорта javax.mail *"?
Я не уверен, является ли это ошибкой jython или неправильным пониманием некоторых нюансов импорта пакетов / классов java с jython 2.5.2.
У меня есть класс jython, который выполняет сценарии jython из Java. Один из этих скриптов просто отправляет почту.
Фрагмент кода jython-скрипта:
from javax.mail import *
from javax.mail.internet import *
from java.util import Properties
props = Properties()
props.put("mail.smtp.host", "path.mydomain.com")
session = Session.getInstance(props,None) # Session can't be resolved
Таким образом, я получаю исключение при попытке разрешить Session, который находится по адресу javax.mail.Session и должен охватываться выражением "from javax.mail import *".
Класс Java, который выполняет Jython, выглядит примерно так:
static {
PythonInterpreter.initialize(System.getProperties(), new Properties(), new String[0]);
}
void run(String scriptPath){
String script;
// script is read into this string here from path
PythonInterpreter python = new PythonInterpreter(null, new PySystemState());
try (
python.exec(script);
) catch (PyException pyEx){
// catch
}
}
Странная вещь, если я выполняю другой jython-скрипт с явным импортом, например
from javax.mail import Session
Тогда это работает нормально, но теперь он также сможет разрешить сеанс из предыдущего сценария.
Я использую jython-standalone из org.python в репозитории maven, версия 2.5.2. Этот код, казалось, работал очень хорошо в 2.1. Может быть, изначально не удается создать оболочки, когда я использую "import *"?
(Я знаю, что у меня должен быть явный импорт по соображениям производительности, но это программное обеспечение выполняет скрипты других людей, поэтому я пытаюсь заставить его работать тем временем.)
1 ответ
После долгих поисков я обнаружил, что это поведение на самом деле является ошибкой: