之前,我在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类型,那么,邮件应该工作(我没有测试这个)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top