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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top