Question

Avant, j'ai déployé 1 application sur Tomcat 6.0.24 et cela fonctionnait bien.Maintenant, j'ai déployé un service Web Axis et la première applitition donne l'erreur lors de l'envoi du courrier.J'utilise Java6 et pour l'envoi avec 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)

Aussi, si je supprimais le service Web du déploiement et essayez d'exécuter l'application, cela fonctionne sans aucun problème.En outre, je suis capable de recevoir le courrier.En outre, j'aimerais ajouter, c'est si je déploiement le WebServie sur DIFFÉRENT TOMCAT, alors les rhums d'applications vont bien.Le problème n'est que lorsque les deux sont sur le même serveur en même temps.

Était-ce utile?

La solution

Désolé pour la réponse tardive. Je suis capable de retracer la raison derrière la question. Dans le service Web, j'utilise Jaxws-RT-2.1..jar dans lequel il y a une classe appelée com.sun.xml.ws.encoding.mimecodec . À Mimecodec, il y a un bloc statique.

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.
     }
 }

Les blocs statiques ci-dessus fournissent des types MIME par défaut pour DCH et il s'agissait d'exécuter sur WS Startup. Maintenant, avant d'envoyer le courrier, le code recherche le type MIME à l'aide de Javax.Activation, CommandMap (Rt.jar / Activation.jar). Le chargement de type MIME attendu a été remplacé dans ce cas. Le courrier ne fonctionnera que si le type MIME est l'un des 4 ci-dessus.

Donc, chaque fois avant d'envoyer le courrier, je viens de réinitialiser le CommandMap à la fonctionnalité attendue à l'aide du code suivant et que la fonctionnalité de messagerie a commencé à fonctionner correctement sans problème.

CommandMap.setDefaultCommandMap(new MailcapCommandMap());

En outre, lorsque j'ai vérifié la version ancienne de Jaxws-Rt.jar (2.1.1), le bloc statique n'était pas présent là-bas, mais la même fonctionnalité a été fournie par une autre classe (désolé comme je ne me souviens pas du nom du nom. Maintenant).

En outre, tout en débogage, j'ai remarqué que l'intérieur javax.activation.mailcapcommandmap , le type MIME était chargé de

System.getProperty("user.home") + File.separator + ".mailcap";

et

System.getProperty("java.home") + File.separator + "lib" + File.separator + "mailcap";

Donc, si nous fournissons le type MIME aux endroits ci-dessus, le courrier doit également fonctionner (je n'ai pas testé cela).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top