Java方法在Java代理中成功执行,但如果在数据库代码中的Java类中执行则会失败

时间:2015-01-25 08:30:57

标签: xpages javax.mail

在我的XPage应用程序中,我使用javax.mail库来读取来自IMAP帐户的邮件。如果我在Java代理中使用它,我用来获取和保存消息的类就可以正常工作。但是,如果我在XPage项目中将完全相同的类放入“Code / Java”中,那么当我尝试获取会话存储时,方法会抛出javax.mail.NoSuchProviderException: No provider for imaps

    Properties props = new Properties();
    props.setProperty("mail.imaps.socketFactory.class", "AlwaysTrustSSLContextFactory");
    props.setProperty("mail.imaps.socketFactory.port", "993");
    props.setProperty("mail.imap.ssl.enable", "true"); 
    props.setProperty("mail.imaps.ssl.trust", "*");
    URLName url = new URLName("imaps", server, 993, "", username, password);
    Session session = Session.getInstance(props, null);
    Store store = session.getStore(url); //THE ERROR OCCURS HERE
    store.connect();

我添加到项目构建路径的javax.mail库与我在Java代理中使用的库完全相同。

我发现上述类型的异常的一些帖子表明它可能是由构建路径中包含的javax.mail的多个版本引起的。但是,似乎并非如此,因为从构建路径中删除javax.mail会导致无法构建类。

有人知道这里有什么问题吗?

3 个答案:

答案 0 :(得分:2)

请检查所使用的 javax.mail 的版本和提供程序。您可以通过添加

来完成此操作
props.setProperty("mail.debug", "true" );

到你的房产。

在控制台上(客户端的Java控制台或服务器控制台,您可以看到结果,如下所示:

DEBUG: JavaMail version 1.4ea

DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc]

另外,您可以通过编程方式获取可用提供程序列表(当您没有控制台访问权限时):

Session session = Session.getInstance(props, null);
Provider[] providers = session.getProviders();
for( Provider p:providers ){
    if( ! ("".equals(tmpStr)) )
        tmpStr = tmpStr + ",";
    tmpStr = tmpStr + p.getProtocol();
}

[您将看到提供商列表中不包含服务器上的 imaps (8.5.3)]

答案 1 :(得分:1)

要发表评论,但代表还不够高......

java代理是否在同一个db中?

如果是的话,当代理人不在时,你可以剪掉它并尝试xpage吗?可能是一个长镜头,但可能值得检查代理人不会以任何方式干涉。

答案 2 :(得分:1)

您希望使用代码示例查看my article如何从Notes中读取IMAP。我没有将代码作为代理运行,而是从命令行运行。机会是,它会更好地为您服务。主要区别(可能?):我使用了Google enhanced IMAP classes

检查一下,告诉我们这是否对您有用!