java-在tomcat中已部署2个应用程序时出现邮件问题
作者:互联网
之前,我已经在Tomcat 6.0.24上部署了1个应用程序,并且运行良好.现在,我已经部署了AXIS Web服务,并且在发送邮件时第一个应用程序给出了错误消息.我正在使用Java6并通过mail-1.4.2.jar进行邮寄.
Error message:
javax.mail.MessagingException: IOException while sending message;
nested exception is:
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed;
boundary="----=_Part_8_85998487.1343293259308"
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:779)
at javax.mail.Transport.send0(Transport.java:191)
at javax.mail.Transport.send(Transport.java:120)
另外,如果我从部署中删除该Web服务并尝试运行该应用程序,则它可以正常工作.另外,我也能收到邮件.此外,我想补充一点的是,如果我将Webservie部署在不同的tomcat上,则应用程序运行良好.仅当两者同时在同一台服务器上时,才出现问题.
解决方法:
这么晚才回复很抱歉.我能够找到问题背后的原因.
在Web服务中,我正在使用jaxws-rt-2.1.3.jar,其中有一个名为com.sun.xml.ws.encoding.MimeCodec的类.在MimeCodec中,有一个静态块.
static {
// DataHandler.writeTo() may search for DCH. So adding some default ones.
try {
CommandMap map = CommandMap.getDefaultCommandMap();
if (map instanceof MailcapCommandMap) {
MailcapCommandMap mailMap = (MailcapCommandMap) map;
String hndlrStr = ";;x-java-content-handler=";
mailMap.addMailcap(
"text/xml" + hndlrStr + XmlDataContentHandler.class.getName());
mailMap.addMailcap(
"application/xml" + hndlrStr + XmlDataContentHandler.class.getName());
mailMap.addMailcap(
"image/*" + hndlrStr + ImageDataContentHandler.class.getName());
mailMap.addMailcap(
"text/plain" + hndlrStr + StringDataContentHandler.class.getName());
}
} catch (Throwable t) {
// ignore the exception.
}
}
上面的静态块为DCH提供了一些默认的MIME类型,并且它是在WS启动时执行的.现在,在发送邮件之前,代码使用javax.activation,CommandMap(rt.jar / activation.jar)搜索MIME类型.在这种情况下,预期的mime类型加载已被覆盖.仅当MIME类型为以上4种之一时,该邮件才有效.
因此,每次发送邮件之前,我都使用以下代码将CommandMAp重置为预期的功能,并且邮件功能已开始正常运行而没有任何问题.
CommandMap.setDefaultCommandMap(new MailcapCommandMap());
另外,当我检查了较旧版本的jaxws-rt.jar(2.1.1)时,那里不存在静态块,但是其他某些类提供了相同的功能(对不起,我现在不记得这个名字了).
另外,在调试时,我注意到在javax.activation.MailcapCommandMap中,MIME类型是从以下位置加载的
System.getProperty("user.home") + File.separator + ".mailcap";
和
System.getProperty("java.home") + File.separator + "lib" + File.separator + "mailcap";
因此,如果我们在上述位置提供MIME类型,那么邮件也应该可以工作(我尚未对此进行测试).
标签:tomcat,javamail,web-services,java 来源: https://codeday.me/bug/20191101/1980632.html