Problema com o e-mail quando 2 aplicações que tenha sido implantado no tomcat
-
12-12-2019 - |
Pergunta
Antes, tenho implantado 1 aplicação no Tomcat 6.0.24 e ele estava funcionando bem.Agora, eu tenho a implantação de um EIXO webservice e o primeiro applcaition está dando o erro ao enviar o email.Eu estou usando Java6 e para a discussão com 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)
Também, se eu remover o serviço web a partir de implantar e tente executar o aplicativo, ele funciona sem qualquer problema.Também, eu sou capaz de receber o email.Além disso, eu gostaria de acrescentar é que se eu implantar o webservie em diferentes tomcat, em seguida, o applciation rum multa.O problema é apenas quando ambos estão no mesmo servidor ao mesmo tempo.
Solução
Desculpe pelo atraso na resposta.Eu sou capaz de traçar a razão por trás do problema.No serviço da web, eu estou usando jaxws-rt-2.1.3.jar em que há uma classe chamada com.o sol.xml.ws.codificação.MimeCodec.Em MimeCodec, há um bloco estático.
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.
}
}
Acima blocos estáticos fornece alguns tipos MIME padrão para DCH e ele foi ficando executado no WS de inicialização.Agora, antes de enviar o e-mail, o código de pesquisas para o tipo MIME, usando javax.a ativação,CommandMap(rt.jar/activation.jar).O tipo mime esperado carregamento foi substituído neste caso.O e-mail vai funcionar apenas se o tipo de MIME é um dos acima de 4.
Por isso, sempre antes de enviar o e-mail, eu apenas repor o CommandMAp para a funcionalidade esperada usando o código a seguir e a funcionalidade de correio tem de começar a trabalhar bem sem qualquer problema.
CommandMap.setDefaultCommandMap(new MailcapCommandMap());
Também, quando eu chequei a versão mais antiga do jaxws-rt.jar(2.1.1), o bloco estático não estava presente lá, mas com a mesma funcionalidade foi fornecida por alguma outra classe(Desculpe, eu não me lembro o nome agora).
Também, durante a depuração, notei que dentro javax.a ativação.MailcapCommandMap, o tipo de MIME estava ficando carregado a partir de
System.getProperty("user.home") + File.separator + ".mailcap";
e
System.getProperty("java.home") + File.separator + "lib" + File.separator + "mailcap";
Assim, se queremos fornecer o tipo de MIME em locais acima, então também, o e-mail deve trabalhar(eu não testei isso).