<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Apache Wink : 7.8 MultiPart</title>
	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
    </head>

    <body>
	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
		    <tr>
			    <td valign="top" class="pagebody">
				    <div class="pageheader">
					    <span class="pagetitle">
                            Apache Wink : 7.8 MultiPart
                                                    </span>
				    </div>
				    <div class="pagesubheading">
					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
				    </div>

				    <h1><a name="7.8MultiPart-MultiPart"></a>MultiPart</h1>

<p>Apache Wink provides a MultiPart data model and providers for producing and consuming multipart messages (multipart/&#42; ). All of the model classes are located under the org.apache.wink.common.model.multipart package distributed with the wink-common jar.</p>

<p>The data model can be used with the wink-server module or with the wink-client module.</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>&nbsp;</th>
<th class='confluenceTh'> Supported </th>
<th class='confluenceTh'> Media Types <br clear="all" /> </th>
<th class='confluenceTh'> Data Model <br clear="all" /> </th>
<th class='confluenceTh'> Provider registration <br clear="all" /> </th>
</tr>
<tr>
<td class='confluenceTd'> Read <br clear="all" /> </td>
<td class='confluenceTd'> Yes <br clear="all" /> </td>
<td class='confluenceTd'> multipart/&#42; <br clear="all" /> </td>
<td class='confluenceTd'> org.apache.wink <br clear="all" />
.common.model<br clear="all" />
 .multipart.InMultiPart <br clear="all" />
<br clear="all" />
org.apache.wink <br clear="all" />
.common.model<br clear="all" />
 .multipart<br clear="all" />
 .BufferedInMultiPart <br clear="all" /> </td>
<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> Write <br clear="all" /> </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> multipart/&#42; <br clear="all" /> </td>
<td class='confluenceTd'> org.apache.wink <br clear="all" />
.common.model<br clear="all" />
 .multipart.OutMultiPart<br clear="all" />
 <br clear="all" />
org.apache.wink <br clear="all" />
.common.model<br clear="all" />
 .multipart<br clear="all" />
 .BufferedOutMultiPart <br clear="all" /> </td>
<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
</tr>
</tbody></table>

<h2><a name="7.8MultiPart-SerializationandDeserialization"></a>Serialization and De-serialization</h2>

<p>The serialization and de-serialization of a multipart message is performed by the multipart providers. The serialization and de-serialization of the parts that make up the multipart message is performed as if each part is a separate message and in accordance with the JAX-RS specification. This means that every part is serialized and de-serialized using the appropriate provider that matches the binding class and content media type of that specific part.</p>

<h2><a name="7.8MultiPart-MainClasses"></a>Main Classes</h2>

<p>The multipart data model is comprised of the following main classes:</p>

<ul>
	<li><b>InMultiPart</b> &#45; is used for de-serialization of an incoming multipart message.</li>
	<li><b>InPart</b> &#45; represents a single part contained in an incoming multipart message.</li>
	<li><b>OutMultiPart</b> &#45; is used for serialization of an outgoing multipart message.</li>
	<li><b>OutPart</b> &#45; represents a single part contained in an outgoing multipart message.</li>
</ul>



<h2><a name="7.8MultiPart-StreamingMultipart"></a>Streaming Multipart</h2>

<p>The base multipart classes are designed to handle multipart messages without buffering the data in order to avoid possible memory issues. This means that the data is accessible only once by the use of an iterator.</p>

<h2><a name="7.8MultiPart-BufferingMultipart"></a>Buffering Multipart</h2>

<p>The BufferedInMultiPart and BufferedOutMultiPart classes are used to handle multipart messages where the complete message is buffered in the memory, allowing random and multiple access of the data. These classes are suitable for situations where the multipart message is small.</p>

<h2><a name="7.8MultiPart-Examples"></a>Examples</h2>

<p>The following examples illustrate the usage of the multipart data model.</p>


<h3><a name="7.8MultiPart-MultipartConsumption"></a>Multipart Consumption</h3>

<p>The following example illustrates the usage of a streaming multipart message.</p>


<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">@Path(<span class="code-quote">"files"</span>)
@POST
@Produces( MediaType.TEXT_PLAIN)
@Consumes( MediaTypeUtils.MULTIPART_FORM_DATA)
<span class="code-keyword">public</span> <span class="code-object">String</span> uploadFiles(InMultiPart inMP) <span class="code-keyword">throws</span> IOException {
    <span class="code-keyword">while</span> (inMP.hasNext()) {
        InPart part = inMP.next();
        MultivaluedMap&lt;<span class="code-object">String</span>, <span class="code-object">String</span>&gt; heades = part.getHeaders();
        <span class="code-object">String</span> CDHeader = heades.getFirst(<span class="code-quote">"Content-Disposition"</span>);
        InputStream is = part.getBody(InputStream.class, <span class="code-keyword">null</span>);
        <span class="code-comment">// use the input stream to read the part body
</span>    }
}
</pre>
</div></div>

<p>&#42; Detailed example of the MultiPart implementation can be seen at the MultiPart example.</p>



<h3><a name="7.8MultiPart-BufferedMultipartConsumption"></a>Buffered Multipart Consumption</h3>

<p>The following example illustrates the usage of a buffering multipart message.</p>


<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">@Path(<span class="code-quote">"users"</span>)
@POST
@Consumes( {<span class="code-quote">"multipart/mixed"</span>})
<span class="code-keyword">public</span> BufferedOutMultiPart addUsers(BufferedInMultiPart inMP) <span class="code-keyword">throws</span> IOException {
    List&lt;InPart&gt; parts = inMP.getParts();
    <span class="code-keyword">for</span> (InPart p : parts) {
        User u = p.getBody(User.class, <span class="code-keyword">null</span>);
	<span class="code-comment">// use the user object retrieved from the part body
</span>
    }
}

</pre>
</div></div>
<p>&#42; Detailed example of the MultiPart implementation can be seen at the MultiPart example.</p>

				    
                    			    </td>
		    </tr>
	    </table>
	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
			<tr>
				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
			</tr>
		    <tr>
			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
		    </tr>
	    </table>
    </body>
</html>