我使用mail-1.4.jar版本来阅读gmail收件箱。为了配置监听器,我已将其升级到javax.mail-1.6.0.jar。此升级后,电子邮件阅读器方法已开始抛出此错误。即使经过大量谷歌和几个与maven依赖关系和版本更改相关的试验,我也无法解决这个问题。
java.lang.NoSuchMethodError:javax.mail.internet.ParameterList.combineSegments()V
下面是我的pom.xml中的maven依赖
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
Java代码下面:
Properties props = new Properties();
props.put("mail.store.protocol", "imaps");
Session session = Session.getInstance(props, null);
Store store = session.getStore();
try {
store.connect("imap.gmail.com", userName, password);
}catch(Exception e){
e.printStackTrace();
logger.debug("IMAP Email Listener connection fail");
}
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message[] msgs = folder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
for (int i = 0; i < msgs.length; i++) {
try {
String subject = msgs[i].getSubject();
logger.debug("subject " + i + ":" + subject);
Object content = msgs[i].getContent(); // Here is the exception comes
logger.debug("content" + i + ":" + content.toString());
} catch(Exception e) {
}
}
当我在独立的java类中运行相同的代码时,一切正常。但是当我在tomcat中部署war文件时,相同的代码不起作用。
堆栈跟踪:
java.lang.NoSuchMethodError: javax.mail.internet.ParameterList.combineSegments()V
com.sun.mail.imap.protocol.BODYSTRUCTURE.parseParameters(BODYSTRUCTURE.java:420)
com.sun.mail.imap.protocol.BODYSTRUCTURE.<init>(BODYSTRUCTURE.java:239)
com.sun.mail.imap.protocol.BODYSTRUCTURE.<init>(BODYSTRUCTURE.java:110)
com.sun.mail.imap.protocol.FetchResponse.parseItem(FetchResponse.java:256)
com.sun.mail.imap.protocol.FetchResponse.parse(FetchResponse.java:212)
com.sun.mail.imap.protocol.FetchResponse.<init>(FetchResponse.java:96)
com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:409)
com.sun.mail.iap.Protocol.command(Protocol.java:355)
com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:2151)
com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:2143)
com.sun.mail.imap.protocol.IMAPProtocol.fetchBodyStructure(IMAPProtocol.java:1717)
com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1552)
com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:808)
javax.mail.internet.MimeMessage.getContent(MimeMessage.java:927)
答案 0 :(得分:1)
当我在独立的java类中运行相同的代码时,一切正常。但是当我在tomcat中部署war文件时,相同的代码不起作用。
可能由以下原因之一引起:
javax.mail
的先前版本或不正确版本。确保javax.mail
jar不在服务器的CLASSPATH上,例如CATALINA_HOME/lib
文件夹javax.mail
的不正确版本打包的。检查生成的包(WAR文件?)以查看它是否包含javax.mail jar 编辑:要轻松找到从哪个JAR文件加载的类,请在启动时或应该使用类之前在应用程序中添加调试输出,例如:
System.out.println(ParameterList.class.getResource("ParameterList.class"));
在虚假服务器上部署您的应用。它将向您显示从哪个(错误的)JAR加载类。