OK. Я думаю, что реальная проблема здесь в том, что, хотя вы должны проверять тип объекта, который вы возвращаете ... это может быть IMAPInputStream, когда это не должно быть.
Я бился над этим более двух дней.
Основная проблема часто заключается в том, что Java Mail API делает что-то очень глупое, он пытается прочитать файл с именем mailcap, который не всегда доступен, если был загружен загрузчик классов. Это особенно сложно в моем случае, потому что я имею дело с пакетами OSGi и, похоже, не имею прямого контроля над тем, какой загрузчик я использую .... но я отвлекся.
Я нашел «исправление» ... возможно, ИСПРАВЛЕНИЕ после просеивания исходного кода Java Mail API в качестве крайней меры.
// Set up our Mailcap entries. This will allow the JAF
// to locate our viewers.
File capfile = new File("/path/to/mailcap");
if (!capfile.isFile()) {
System.out.println(
"Cannot locate the \"simple.mailcap\" file.");
System.exit(1);
}
CommandMap.setDefaultCommandMap( new MailcapCommandMap(
new FileInputStream(capfile)));
Я много дней гуглял и нашел десятки людей с такой же проблемой и различными предложениями classpath, thread, classloader. Но это единственное, что сработало для меня, и это относительно просто. Отсюда и публикация этого к тому, что кажется ближайшим связанным вопросом с некоторым импульсом. Уф.