Java 方法在 Java 代理中成功执行,但如果在数据库代码中的 Java class 中执行则失败
Java method is successfully executed inside a Java agent, but fails if executed in a Java class in the database's code
在我的 XPages 应用程序中,我使用 javax.mail
库从 IMAP 帐户读取邮件消息。如果我在 Java 代理中使用它,我用来获取和保存消息的 class 工作得很好。但是,如果我在我的 XPages 项目中将完全相同的 class 放入 "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
会导致 class 无法构建。
有人知道这里有什么问题吗?
正要发表评论,但代表还不够高....
java代理是否在同一个数据库中?
如果是的话,能不能在代理不在的时候把它剪下来试试xpage?可能性不大,但可能值得检查代理是否以任何方式进行干扰。
您想查看 my article with a code sample how to read IMAP from Notes. I didn't run that code as agent, but from the command line. Chances are, that it will work better for you. Main difference (possibly?): I used the Google enhanced IMAP classes。
检查一下,让我们知道它是否适合您!
请检查使用的 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();
}
[您会看到提供商列表不包含服务器 (8.5.3) 上的 imaps]
在我的 XPages 应用程序中,我使用 javax.mail
库从 IMAP 帐户读取邮件消息。如果我在 Java 代理中使用它,我用来获取和保存消息的 class 工作得很好。但是,如果我在我的 XPages 项目中将完全相同的 class 放入 "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
会导致 class 无法构建。
有人知道这里有什么问题吗?
正要发表评论,但代表还不够高....
java代理是否在同一个数据库中?
如果是的话,能不能在代理不在的时候把它剪下来试试xpage?可能性不大,但可能值得检查代理是否以任何方式进行干扰。
您想查看 my article with a code sample how to read IMAP from Notes. I didn't run that code as agent, but from the command line. Chances are, that it will work better for you. Main difference (possibly?): I used the Google enhanced IMAP classes。
检查一下,让我们知道它是否适合您!
请检查使用的 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();
}
[您会看到提供商列表不包含服务器 (8.5.3) 上的 imaps]