Как добавить пользовательские типы контента MIME в приложение Eclipse RCP - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть система клиент / сервер, которая передает сообщения в формате MIME. Я создал несколько пользовательских типов MIME, используя инфраструктуру активации JavaBeans.

Я создал простой проект Java со следующим:

my-mime
+- src/com/foo/FooContentHandler
+- META-INF/mailcap
+- META-INF/mime.types

mailcap:

application/x-foo; ; x-java-content-handler=com.foo.FooContentHandler

mime.types:

type=application/x-foo desc="foo" exts="foo"

Я продемонстрировал эту работу в отдельном тестовом примере. Однако, когда я добавляю его как плагин, MIME-тип не воспринимается. Я предполагаю, что это связано с тем фактом, что классы активации Java не могут видеть мои пользовательские определения типов MIME.

Как я могу добавить их в свой комплект, чтобы они были подобраны?

Ответы [ 4 ]

0 голосов
/ 02 октября 2016

С https://docs.oracle.com/cd/E17802_01/j2se/javase/technologies/desktop/javabeans/glasgow/javadocs/javax/activation/MailcapCommandMap.html

Порядок поиска файла Mailcap: MailcapCommandMap ищет в различных местах в системе пользователя записи файла mailcap.Когда делается запрос на поиск команд в MailcapCommandMap, он ищет файлы mailcap в следующем порядке:

  1. Программно добавленные записи в экземпляр MailcapCommandMap.
  2. Файл .mailcap вдомашний каталог пользователя.
  3. Файл /lib/mailcap.
  4. Файл или ресурсы с именем META-INF / mailcap.
  5. Файл или ресурс с именем META-INF / mailcap.default (обычно находится> только в файле activ.jar).

Из уже мертвой ссылки:

JAF использует загрузчик классов контекста для загрузки классов.Если это не удается, он использует загрузчик классов, который загрузил классы JAF.

Когда JAF упакован с приложением, классы JAF загружаются тем же загрузчиком классов, что и другие классы приложения, так что даже если контекстзагрузчик классов не установлен. JAF может найти другие классы приложения.

Когда JAF является частью JDK, классы JAF загружаются загрузчиком системных классов.Без установленного загрузчика классов контекста JAF не может найти подходящий загрузчик классов для загрузки классов приложений.

Пример программной установки MailcapCommandMap:

    static { // add handlers for main MIME types
            MailcapCommandMap mcap = new MailcapCommandMap(); 
            mcap.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
            mcap.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
            mcap.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
            mcap.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed; x-java-fallback-entry=true");
            mcap.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
            CommandMap.setDefaultCommandMap(mcap); 
    } 
0 голосов
/ 01 июля 2013

Я понимаю, что прошло много времени с тех пор, как вы задали этот вопрос, но в любом случае ...

Похоже, ваше приложение RCP не может прочитать файл.

Сначала убедитесь, что mailcapи mime.types ресурсы принадлежат тому же подключаемому модулю, который пытается получить к ним доступ.

Во-вторых, попробуйте создать MimetypesFileTypeMap с явной спецификацией файла типа mime .Начните со статического файла и абсолютного пути к файлу, например /tmp/mime.types, и если это работает, то ваша проблема действительно заключается в загрузке ресурсов.В этом случае получить поток из плагина и построить ваш MimetypesFileTypeMap с этим потоком.

0 голосов
/ 02 июля 2013

В моем проекте у меня было два плагина RCP. Один содержал Java Mail jar и все его зависимости, включая activation.jar. Другой содержал пользовательский код для составления и отправки писем.

Изначально я пытался использовать MimetypesFileTypeMap во втором плагине и идентифицировать тип MIME, используя метод класса getContentType(String filename). Файл mime.types был помещен в папку META-INF плагина. Проблема была почти такая же. Идентификация типов MIME отлично работала, когда приложение RCP запускалось из IDE, но не работала, когда оно запускалось как приложение экспорта RCP.

Но затем я узнаю, что Java Mail пытается идентифицировать типы MIME, но сам, например, при прикреплении файлов к электронной почте. И он использует свою зависимость activation.jar. После этого мне нужно было решить вопрос о том, как заставить activation.jar найти правильный mime.types в области действия первого плагина.

Но единственный способ, который я нашел, - это переупаковка activation.jar и добавление правильного mime.types в папку jar META-INF. К сожалению, это решение не идеально, поскольку оно «взламывает» стороннюю библиотеку.

0 голосов
/ 13 декабря 2011

Убедитесь, что ваш проект является проектом плагина, и убедитесь, что build.properties проверяет ваш mailcap и mime.types как экспортированные (откройте манифест и используйте вкладку Build).

...