簡體   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