--- /dev/null 2014-05-19 15:16:57.000000000 +0200 +++ new/test/javax/xml/ws/8043129/MailTest.java 2014-05-19 15:16:56.000000000 +0200 @@ -0,0 +1,123 @@ +import javax.activation.CommandMap; +import javax.activation.MailcapCommandMap; +import javax.mail.BodyPart; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Multipart; +import javax.mail.Session; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; +import javax.xml.soap.AttachmentPart; +import javax.xml.soap.MessageFactory; +import javax.xml.soap.SOAPException; +import javax.xml.soap.SOAPMessage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Properties; + +/* + * @test + * @bug 8043129 + * @summary JAF initialisation in SAAJ clashing with the one in javax.mail + * @author mkos + * @library javax.mail.jar + * @build MailTest + * @run main MailTest + */ +public class MailTest { + + String host = null; + String user = ""; + String password = null; + String from = null; + String to = null; + + public static void main(String[] args) { + MailTest t = new MailTest(); + + t.user = "somebody@somewhere.com"; + t.from = "somebody@somewhere.com"; + t.to = "somebody@somewhere.com"; + + t.user = "somebody@somewhere.com"; + t.password = "somepassword"; + t.host = "somehost"; + + t.sendMail(); //this works + + t.addSoapAttachement(); + t.sendMail(); //after addAttachmentPart to soapmessage it do not work + + // workaroundJAFSetup(); + // t.sendMail(); //after workaround works again + } + + void addSoapAttachement() { + try { + MessageFactory messageFactory = MessageFactory.newInstance(); + SOAPMessage message = messageFactory.createMessage(); + AttachmentPart a = message.createAttachmentPart(); + a.setContentType("binary/octet-stream"); + message.addAttachmentPart(a); + } catch (SOAPException e) { + e.printStackTrace(); + } + } + + void sendMail() { + + try { + Properties props = new Properties(); + props.put("mail.smtp.host", host); + props.put("mail.smtp.auth", "true"); + + Session session = Session.getInstance(props); + session.setDebug(true); + + // Define message + MimeMessage message = new MimeMessage(session); + message.setFrom(new InternetAddress(from)); + message.addRecipients(Message.RecipientType.TO, to); + message.setSubject("this is a multipart test"); + + Multipart multipart = new MimeMultipart(); + + BodyPart messageBodyPart1 = new MimeBodyPart(); + messageBodyPart1.setText("please send also this Content\n ciao!"); + multipart.addBodyPart(messageBodyPart1); + + BodyPart messageBodyPart2 = new MimeBodyPart(); + messageBodyPart2.setContent("please send also this Content
ciao!", "text/html; charset=UTF-8"); + multipart.addBodyPart(messageBodyPart2); + + message.setContent(multipart); + + /* + Transport tr = session.getTransport("smtp"); + tr.connect(host,user, password); + tr.sendMessage(message,InternetAddress.parse(to)); + tr.close(); + */ + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + message.writeTo(baos); + String output = baos.toString(); + System.out.println("output = " + output); + if (output.contains("also this Content")) { + System.out.println("Test PASSED."); + } else { + System.out.println("Test FAILED, missing content."); + throw new IllegalStateException("Test FAILED, missing content."); + } + } catch (MessagingException ignored) { + } catch (IOException ignored) { + } + } + + // this is how the error can be worked around ... + static void workaroundJAFSetup() { + MailcapCommandMap mailMap = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); + mailMap.addMailcap("multipart/mixed;;x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); + } +}