2011-03-04 27 views
0

我在我們的一個項目中遇到了郵件發送組件的奇怪問題。由於我們轉而使用Apache Ivy來管理構建依賴關係,因此我們現在部署名爲mail-1.4.4.jar的jar而不是之前的mail.jarJavaMail jar名稱導致JAF異常?

隨着版本化的jar,我們得到一個堆棧跟蹤(見下文)。如果我拿同一個罐子手動重命名爲mail.jar,郵件發送成功。看起來像JAF的某種類路徑問題無法找到郵件組件類,但我很難理解如何解決根本問題,而不是配置構建以重新命名該jar的創可貼解決方案。

故障堆棧跟蹤:

javax.mail.MessagingException: IOException while sending message; 
    nested exception is: 
     javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
     boundary="----=_Part_0_522583802.1299253374905" 
     at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1141) 
     at javax.mail.Transport.send0(Transport.java:195) 
     at javax.mail.Transport.send(Transport.java:124) 
     at com.rbccm.core.util.MailUtil.sendMail(MailUtil.java:91) 
     at com.rbccm.core.util.MailUtil.sendWithAttachment(MailUtil.java:59) 
     at com.rbccm.core.util.MailUtil.sendWithAttachment(MailUtil.java:36) 
     at com.rbccm.core.util.MailTask$Command$1.execute(MailTask.java:88) 
     at com.rbccm.core.util.MailTask$Command$1.execute(MailTask.java:83) 
     at com.rbccm.core.util.BatchTask.execute(BatchTask.java:31) 
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.Task.perform(Task.java:348) 
     at org.apache.tools.ant.Target.execute(Target.java:357) 
     at org.apache.tools.ant.Target.performTasks(Target.java:385) 
     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337) 
     at org.apache.tools.ant.Project.executeTarget(Project.java:1306) 
     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
     at org.apache.tools.ant.Project.executeTargets(Project.java:1189) 
     at org.apache.tools.ant.Main.runBuild(Main.java:758) 
     at org.apache.tools.ant.Main.startAnt(Main.java:217) 
     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257) 
     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104) 
Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
     boundary="----=_Part_0_522583802.1299253374905" 
     at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:877) 
     at javax.activation.DataHandler.writeTo(DataHandler.java:302) 
     at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1476) 
     at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1772) 
     at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1099) 
     ... 25 more 

Java的版本輸出:

java version "1.6.0_14" 
Java(TM) SE Runtime Environment (build 1.6.0_14-b08) 
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode) 

回答

0

這聽起來像一個類路徑的問題。 Java Activation Framework可能會設置一個包含mail.jar的類路徑。這可以解釋爲什麼當你將mail-1.4.4.jar重命名爲mail.jar時,它會起作用。

確保您的JAF和Java Mail API jar兼容,然後適當更新類路徑。

+0

這確實是一個類路徑問題。系統中的其他東西強制將mail.jar引用到CLASSPATH變量中。我仍然對組件未能找到mail-1.4.4.jar感到困惑,但這是一個Ant類路徑問題,而不是JavaMail問題,所以我會發布另一個問題。 – Ophidian 2011-03-04 16:58:25