1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.submit.transports.http.support.attachments;
14
15 import com.eviware.soapui.SoapUI;
16 import com.eviware.soapui.impl.rest.RestRequest;
17 import org.apache.commons.httpclient.methods.RequestEntity;
18
19 import javax.mail.MessagingException;
20 import javax.mail.internet.MimeMessage;
21 import javax.mail.internet.MimeMultipart;
22 import java.io.ByteArrayOutputStream;
23 import java.io.IOException;
24 import java.io.OutputStream;
25
26 /***
27 * MimeMessage request class
28 *
29 * @author ole.matzura
30 */
31
32 public class RestRequestMimeMessageRequestEntity implements RequestEntity
33 {
34 private final MimeMessage message;
35 private byte[] buffer;
36 private final RestRequest restRequest;
37
38 public RestRequestMimeMessageRequestEntity( MimeMessage message, RestRequest restRequest )
39 {
40 this.message = message;
41 this.restRequest = restRequest;
42 }
43
44 public long getContentLength()
45 {
46 try
47 {
48 ByteArrayOutputStream out = new ByteArrayOutputStream();
49 writeRequest( out );
50 buffer = out.toByteArray();
51 return buffer.length;
52 }
53 catch( Exception e )
54 {
55 SoapUI.logError( e );
56 return -1;
57 }
58 }
59
60 public String getContentType()
61 {
62 try
63 {
64 String header = message.getHeader( "Content-Type" )[0];
65 int ix = header.indexOf( "boundary" );
66
67 return "multipart/related; type=\"" + restRequest.getMediaType() + "\"; " +
68 "start=\"" + AttachmentUtils.ROOTPART_SOAPUI_ORG + "\"; " + header.substring( ix );
69 }
70 catch( MessagingException e )
71 {
72 SoapUI.logError( e );
73 }
74
75 return null;
76 }
77
78 public boolean isRepeatable()
79 {
80 return true;
81 }
82
83 public void writeRequest( OutputStream arg0 ) throws IOException
84 {
85 try
86 {
87 if( buffer == null )
88 {
89 arg0.write( "\r\n".getBytes() );
90 ( (MimeMultipart) message.getContent() ).writeTo( arg0 );
91 }
92 else
93 arg0.write( buffer );
94 }
95 catch( Exception e )
96 {
97 SoapUI.logError( e );
98 }
99 }
100 }