在Tomcat部署的2个应用程序时,请使用邮件
-
12-12-2019 - |
题
之前,我在Tomcat 6.0.24上部署了1个应用程序,它正常工作。现在,我部署了一个轴WebService,第一个ApplCaition正在发送邮件时给出错误。我正在使用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服务并尝试运行应用程序,则它会在没有任何问题的情况下工作。此外,我能收到邮件。此外,如果我在不同的Tomcat上部署WebServie,我想添加的是,Applciation rums很好。此问题仅在两者同时在同一服务器上。 解决方案
抱歉迟到的回复。我能够追踪问题背后的原因。
在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 / sectivation.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类型,那么,邮件应该工作(我没有测试这个)。
不隶属于 StackOverflow