![](/img/trans.png)
[英]How to add custom folders to an exported Eclipse RCP application?
[英]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應用程序無法讀取該文件。
首先,請確保mailcap
和mime.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
。 不幸的是,此解決方案並不完美,因為它會“入侵”第三方庫。
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);
}
確保您的項目是一個Plugin Project,並確保build.properties中的mailcap和mime.types已作為導出檢查(打開清單並使用Build選項卡)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.