Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 无法加载com.sun.mail.handlers.multipart\u_Java_Jakarta Mail_Tomcat8 - Fatal编程技术网

Java 无法加载com.sun.mail.handlers.multipart\u

Java 无法加载com.sun.mail.handlers.multipart\u,java,jakarta-mail,tomcat8,Java,Jakarta Mail,Tomcat8,我们使用Javamail api创建了一个侦听器,用于读取电子邮件收件箱中新添加的消息。一旦侦听器收到新消息,我们将尝试获取所有头信息以及内容部分。对于解析内容,我们已经编写了一个适当的解析逻辑,它可以很好地用于所有类型的内容(文本、html、多部分等)。下面是解析代码 private String getText(Part p) throws MessagingException, IOException { if (p.isMimeType("text/*")) {

我们使用Javamail api创建了一个侦听器,用于读取电子邮件收件箱中新添加的消息。一旦侦听器收到新消息,我们将尝试获取所有头信息以及内容部分。对于解析内容,我们已经编写了一个适当的解析逻辑,它可以很好地用于所有类型的内容(文本、html、多部分等)。下面是解析代码

private String getText(Part p) throws MessagingException, IOException {
        if (p.isMimeType("text/*")) {
            String s = (String) p.getContent();         
            return s;
        }

        if (p.isMimeType("multipart/alternative")) {
            // prefer html text over plain text
            Multipart mp = (Multipart) p.getContent();
            String text = null;
            for (int i = 0; i < mp.getCount(); i++) {
                Part bp = mp.getBodyPart(i);
                if (bp.isMimeType("text/plain")) {
                    if (text == null){
                        text = getText(bp);
                        return text;
                    }

                } else if (bp.isMimeType("text/html")) {
                    String s = getText(bp);
                    if (s != null)
                    return s;

                } else {
                    return getText(bp);
                }
            }
            return text;
        } else if (p.isMimeType("multipart/*")) {
            Multipart mp = (Multipart) p.getContent();
            for (int i = 0; i < mp.getCount(); i++) {
                String s = getText(mp.getBodyPart(i));
                if (s != null)
                    return s;
            }
        }

        return null;
    }
我们需要一个具体的解决方案来解决这个问题。我们正在使用以下环境和api版本

JDK-1.8.0_65, Tomcat-8.0.35, Java mail-1.5.5,
Spring-4

很难理解,如果什么都没有改变,为什么会失败。你真的需要弄清楚是什么改变了。您使用的是JDK或Tomcat的更新版本吗

“通过编程重新启动侦听器”的确切含义是什么?您正在重新启动Tomcat服务器吗


出现此问题通常是因为JavaBeans激活框架(JAF,现在是JDK的一部分)找不到描述用于MIME类型的Java类的配置文件。此配置文件是JavaMail jar文件的一部分。如果您的应用程序被更改,而此文件丢失,这就可以解释了。如果您使用一些不寻常的类加载方案,也可能由于类加载器出现问题而发生这种情况。

如果您正在重新加载webapp,则会捕获第一个webapp类加载器。创建新线程时,上下文类加载器设置为父线程的上下文类加载器

synchronized void enqueue(MailEvent event, Vector vector) {
    // if this is the first event, create the queue and start the event task
    if (q == null) {
        q = new LinkedBlockingQueue<QueueElement>();
        if (executor != null) {
            executor.execute(this);
        } else {
            Thread qThread = new Thread(this, "JavaMail-EventQueue");
            qThread.setDaemon(true);  // not a user thread
            qThread.start();
        }
    }
    q.add(new QueueElement(event, vector));
}
synchronized void enqueue(MailEvent event, Vector vector) {
    // if this is the first event, create the queue and start the event task
    if (q == null) {
        q = new LinkedBlockingQueue<QueueElement>();
        if (executor != null) {
            executor.execute(this);
        } else {
            Thread qThread = new Thread(this, "JavaMail-EventQueue");
            qThread.setDaemon(true);  // not a user thread
            qThread.start();
        }
    }
    q.add(new QueueElement(event, vector));
}
public void messagesAdded(MessageCountEvent e) {
    Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
    //Your existing code....
}