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  }