Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何向EclipseRCP应用程序添加自定义MIME内容类型_Java_Jakarta Ee_Eclipse Plugin_Eclipse Rcp_Mime Types - Fatal编程技术网

Java 如何向EclipseRCP应用程序添加自定义MIME内容类型

Java 如何向EclipseRCP应用程序添加自定义MIME内容类型,java,jakarta-ee,eclipse-plugin,eclipse-rcp,mime-types,Java,Jakarta Ee,Eclipse Plugin,Eclipse Rcp,Mime Types,我有一个使用MIME格式传递消息的客户机/服务器系统。我已经使用JavaBeans激活框架创建了一些自定义mimetype 我创建了一个简单的java项目,包括以下内容: my-mime +- src/com/foo/FooContentHandler +- META-INF/mailcap +- META-INF/mime.types 邮资: application/x-foo; ; x-java-content-handler=com.foo.FooContentHandler mime

我有一个使用MIME格式传递消息的客户机/服务器系统。我已经使用JavaBeans激活框架创建了一些自定义mimetype

我创建了一个简单的java项目,包括以下内容:

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

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

type=application/x-foo desc="foo" exts="foo"
我已经在一个独立的测试用例中演示了这一点。然而,当我把它作为插件添加时,MIME类型并没有被接受。我认为这是因为Java激活类看不到我的自定义mime类型定义


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

确保您的项目是一个插件项目,并确保build.properties在导出时检查了mailcap和mime.types打开清单并使用build选项卡。

我意识到您问这个问题已经有一段时间了,但无论如何

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

首先,确保mailcap和mime.types资源属于尝试访问它们的同一插件

其次,尝试用构造MimetypesFileTypeMap。
从静态文件和绝对文件路径开始,例如/tmp/mime.types,如果这样做有效,那么您的问题实际上是资源加载。在这种情况下,从plugin和你的MimetypesFileTypeMap与该流。

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

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

但后来我发现,Java Mail试图识别MIME类型,而不是它自己,例如,将文件附加到电子邮件中。它使用它的dependency activation.jar。之后,我需要解决如何强制activation.jar在第一个插件的范围内找到正确的mime.types的问题

但我找到的唯一方法是重新打包activation.jar并在jar的META-INF文件夹中添加正确的mime.types。不幸的是,这个解决方案并不完美,因为它攻击了第三方库。

来自

Mailcap文件搜索顺序: MailcapCommandMap在用户系统的各个位置查找mailcap文件条目。当请求在MailcapCommandMap中搜索命令时,它将按以下顺序搜索mailcap文件:

通过编程向MailcapCommandMap实例添加条目。 用户主目录中的.mailcap文件。 文件/lib/mailcap。 名为META-INF/mailcap的文件或资源。 名为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); 
    }