Почему мне не удается разрешить общедоступные объекты 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 ответ

Решение

После долгих поисков я обнаружил, что это поведение на самом деле является ошибкой:

http://bugs.jython.org/issue1383

Другие вопросы по тегам