簡體   English   中英

java.lang.ClassCastException:com.sun.mail.handlers.multipart_mixed無法強制轉換為javax.activation.DataContentHandler

[英]java.lang.ClassCastException: com.sun.mail.handlers.multipart_mixed cannot be cast to javax.activation.DataContentHandler

part.writeTo(out); 拋出java.lang.ClassCastException

com.sun.mail.handlers.multipart_mixed無法強制轉換為javax.activation.DataContentHandler

private static void getBodyAsRFC822(
        MimePart part, boolean ignoreHeaders, ByteArrayOutputStreamout) {
    try {
        out.reset();

        if (ignoreHeaders) {
            OutputStream os = MimeUtility.encode(out, part.getEncoding());
            part.getDataHandler().writeTo(os);
            os.close();
        } else {
            part.writeTo(out);
            out.close();
        }
    }
    catch (Exception e) {
        _log.error(e);
    }
}

這是我的build.gradle

compileOnly group: 'com.liferay', name: 'com.liferay.portal.instance.lifecycle', version: '2.0.0'
compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.46.0"
compileOnly group: "org.osgi", name: "org.osgi.core", version: "6.0.0"
compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0"

compileInclude group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
compileInclude group: 'org.apache.mina', name: 'mina-core', version: '2.0.16'
compileInclude group: 'javax.mail', name: 'mail', version: '1.4'
compileInclude group: "javax.servlet", name: "servlet-api", version: "2.5"

但是multipart_mixed implements DataContentHandler ,因此它應該是可轉換的。 為什么不呢?

每當子類顯然不能被類型化為其合法的超類時,您就會有不同的類,由不同的類加載器加載。 找到加載激活(超類)類的位置,除去一個以外的所有類(通常你需要消除你自己的項目帶來的一個類)並使用框架中提供的類。

Exception消息命名有問題的類,但省略了參與游戲的類加載器,這就是為什么消息在首次嘗試理解它時沒有多大意義。 一旦你了解了多個類加載器,即javax.activation.DataContentHandler多個實例,它就會更有意義。

編輯:使用compileInclude中的compileInclude語句,您可以有效地將所有依賴項捆綁到自己的jar文件中。 但是框架有自己的這些類的版本,雖然它們都有相同的名稱,但它們現在將是不同的版本(不僅僅是數字),通過不同的類加載器加載。 如果您明確依賴於OSGi運行時中永遠不會找到的東西,那么您應該只使用compileInclude 相反,使用compileOnlycompile為默認值,並將其他依賴項與模塊一起部署到運行時。

請查看此文章 ,詳細了解您所做的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM