繁体   English   中英

如何将自定义MIME内容类型添加到Eclipse RCP应用程序

[英]How to add custom MIME content types to Eclipse RCP application

我有一个使用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类型定义。

我如何将它们添加到我的捆绑包中以便被拾取?

我知道您提出这个问题已经有一段时间了,但是无论如何...

看起来您的RCP应用程序无法读取该文件。

首先,请确保mailcapmime.types资源由尝试访问它们的同一插件拥有。

其次,尝试使用显式的mime-type文件规范构造MimetypesFileTypeMap 从静态文件和绝对文件路径开始,例如/tmp/mime.types ,如果/tmp/mime.types ,那么您的问题确实是资源加载。 在这种情况下,请从插件获取流并使用该流构造您的MimetypesFileTypeMap

在我的项目中,我有两个RCP插件。 其中一个包含Java Mail jar及其所有依赖项,包括activation.jar 另一个包含用于编写和发送邮件的自定义代码。

最初,我尝试在第二个插件中使用MimetypesFileTypeMap并使用类方法getContentType(String filename)标识MIME类型。 mime.types文件放置在插件的META-INF文件夹中。 问题几乎是相同的。 从IDE启动RCP应用程序时,MIME类型识别工作正常,但作为导出RCP应用程序启动时,MIME类型识别失败。

但是后来我发现Java Mail会尝试识别MIME类型,但是会识别自身,例如,将文件附加到电子邮件中。 并且使用其依赖项activation.jar 之后,我需要解决有关如何强制activation.jar在第一个插件范围内找到正确的mime.types的问题。

但是我发现的唯一方法是重新包装activation.jar并在jar的META-INF文件夹中添加正确的mime.types 不幸的是,此解决方案并不完美,因为它会“入侵”第三方库。

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的文件或资源(通常仅在activation.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); 
    } 

确保您的项目是一个Plugin Project,并确保build.properties中的mailcap和mime.types已作为导出检查(打开清单并使用Build选项卡)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM