1 package org.codehaus.xfire.attachments; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.File; 6 import java.io.InputStream; 7 import java.util.Properties; 8 9 import javax.activation.DataHandler; 10 import javax.activation.FileDataSource; 11 import javax.mail.MessagingException; 12 import javax.mail.Session; 13 import javax.mail.internet.MimeMessage; 14 import javax.mail.internet.MimeMultipart; 15 16 import org.codehaus.xfire.MessageContext; 17 import org.codehaus.xfire.fault.Soap11FaultHandler; 18 import org.codehaus.xfire.handler.EchoHandler; 19 import org.codehaus.xfire.service.MessageService; 20 import org.codehaus.xfire.soap.Soap12; 21 import org.codehaus.xfire.test.AbstractXFireTest; 22 import org.dom4j.Document; 23 24 /*** 25 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse </a> 26 */ 27 public class AttachmentTest 28 extends AbstractXFireTest 29 { 30 public void setUp() throws Exception 31 { 32 super.setUp(); 33 34 MessageService service = new MessageService(); 35 service.setName("Echo"); 36 service.setSoapVersion(Soap12.getInstance()); 37 service.setWSDLURL(getClass().getResource("/org/codehaus/xfire/echo11.wsdl").toString()); 38 39 service.setServiceHandler(new EchoHandler()); 40 service.setFaultHandler(new Soap11FaultHandler()); 41 42 getServiceRegistry().register(service); 43 } 44 45 public void testAttachments() 46 throws Exception 47 { 48 JavaMailAttachments sendAtts = new JavaMailAttachments(); 49 50 sendAtts.setSoapMessage( 51 new SimpleAttachment("echo.xml", 52 createDataHandler("./src/test/org/codehaus/xfire/attachments/echo11.xml"))); 53 54 sendAtts.addPart( 55 new SimpleAttachment("xfire_logo.jpg", 56 createDataHandler("./src/test/org/codehaus/xfire/attachments/xfire_logo.jpg"))); 57 58 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 59 sendAtts.write(bos); 60 61 InputStream is = new ByteArrayInputStream(bos.toByteArray()); 62 63 Session session = Session.getDefaultInstance(new Properties(), null); 64 MimeMessage inMsg = new MimeMessage(session, is); 65 inMsg.addHeaderLine("Content-Type: " + sendAtts.getContentType()); 66 67 MimeMultipart inMP = (MimeMultipart) inMsg.getContent(); 68 69 JavaMailAttachments atts = new JavaMailAttachments(inMP); 70 assertEquals(1, atts.size()); 71 assertNotNull(atts.getSoapMessage()); 72 73 ByteArrayOutputStream out = new ByteArrayOutputStream(); 74 MessageContext context = 75 new MessageContext( "Echo", 76 null, 77 out, 78 null, 79 null ); 80 context.setProperty(JavaMailAttachments.ATTACHMENTS_KEY, atts); 81 82 getXFire().invoke(atts.getSoapMessage().getDataHandler().getInputStream(), context); 83 84 Document response = readDocument(out.toString()); 85 addNamespace("m", "urn:Echo"); 86 assertValid("//m:echo", response); 87 } 88 89 private DataHandler createDataHandler(String name) throws MessagingException 90 { 91 File f = new File(name); 92 FileDataSource fs = new FileDataSource(f); 93 94 return new DataHandler(fs); 95 } 96 }