<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Apache Wink : JAX-RS Request and Response Entities</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 : JAX-RS Request and Response Entities
                                                    </span>
				    </div>
				    <div class="pagesubheading">
					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
				    </div>

				    <h1><a name="JAX-RSRequestandResponseEntities-RequestandResponseEntities"></a>Request and Response Entities</h1>

<p>Request and response entities represent the main part of an HTTP request.  Entities are also refered to as the "<b>message body</b>" or "<b>payload</b>".  Entities are sent via a request, usually an HTTP POST and PUT method are used or they are returned in a response, this is relevant for all HTTP methods.</p>

<p>Unlike other distributed systems technologies, there is generally no wrapper around an entity.  For example, if a request is made for a binary PNG image represented here, <a href="http://example.com/user/abcd/portrait.png">http://example.com/user/abcd/portrait.png</a> , the response entity is only the PNG image binary data.</p>

<p>Resource methods have a single entity parameter that represents the main entity body.  It is the <b>only unannotated parameter allowed</b> in a resource method.</p>

<p>When using JAX-RS, request and response entites are mapped to and from Java types by Entity Providers that implement the JAX-RS interfaces, MessageBodyReader and MessageBodyWriter.  Applications may provide their own MessageBodyReaders and MessageBodyWriters that take precedent over the runtime provided ones.</p>

<p><a name="JAX-RSRequestandResponseEntities-MediaType"></a></p>

<h3><a name="JAX-RSRequestandResponseEntities-MediaTypes%28MIME%29andjavax.ws.rs.core.MediaType"></a>Media Types (MIME) and javax.ws.rs.core.MediaType</h3>

<p>The request and response entity can be any form of data, a way of identifying what the entities bits and bytes represent is needed.  In requests and responses, the <b>Content-Type</b> HTTP header is used to indicate the type of entity currently being sent. The Content-Type value comes from a well known <a href="http://www.iana.org/assignments/media-types/">media type as registered in IANA</a>.</p>

<p>Common content types include "text/plain", "text/xml", "text/html", and "application/json".</p>

<p>Correct Content-Type values are essential for clients and servers.  "<b>Unusual</b>" behavior by clients such as browsers can be attributed to wrong content types.</p>

<p>Media Types are also used in a request <b>Accept</b> header to indicate what type of resource representation the client wants to receive.  Clients could indicate a preference as well, such as JSON before XML.</p>

<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the HTTP spec regarding the Accept header and the Content Negotiation topic.</td></tr></table></div>


<p>javax.ws.rs.core.MediaType has functionality and representations related to Media Types.</p>

<p><a name="JAX-RSRequestandResponseEntities-ConsumesAndProduces"></a></p>

<h3><a name="JAX-RSRequestandResponseEntities-@Consumesand@ProducesAnnotations"></a>@Consumes and @Produces Annotations</h3>


<p>Annotating a class or a resource method with @Consumes and @Produces will help the JAX-RS runtime identify the appropriate methods to invoke for requests.  For example:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">@Path(<span class="code-quote">"/example"</span>)
<span class="code-keyword">public</span> RootResource {
    @POST
    @Consumes(<span class="code-quote">"text/xml"</span>)
    @Produces(<span class="code-quote">"text/xml"</span>)
    <span class="code-keyword">public</span> Response getOnlyXML(<span class="code-object">String</span> incomingXML) {
        <span class="code-keyword">return</span> Response.ok(<span class="code-quote">"only xml"</span>).type(<span class="code-quote">"text/xml"</span>).build();
    }

    @GET
    @Produces(<span class="code-quote">"text/html"</span>, <span class="code-quote">"text/plain"</span>)
    <span class="code-keyword">public</span> <span class="code-object">String</span> getText() {
        <span class="code-keyword">return</span> <span class="code-quote">"text representation"</span>;
    }
}
</pre>
</div></div>
<p>In the previous code example, if a HTTP POST to "/example" was issued with a Content-Type header of "text/xml" and an Accept header of "text/xml", then the RootResource#getOnlyXML method would be invoked.  If the same POST request was issued with an Accept header of "text/plain", then a 406 Not Acceptable response would be generated by the JAX-RS runtime and the method would not be invoked.</p>

<p>It is a good practice to return a javax.ws.rs.core.Response with a .type() or .variant() call since it would guarantee a return content type.  Notice that the above getText() code supports multiple data types.  A javax.ws.rs.core.Response object returned must have a single concrete Content-Type value.  In orer to select the best acceptable representation in the resource method, use either the <b>@Context HttpHeaders#getAcceptableMediaTypes()</b> or a <b>@Context Request#selectVariant()</b> method.</p>
<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the Context topic page for more information.</td></tr></table></div>

<p>While resource methods may consume one media type for example XML and produce another such as JSON, most user requests expect the same media type that was sent in the request to be returned in the response.</p>

<p>If the Content-Type header is empty and there is an entity, then the JAX-RS runtime will make the Content-Type be "<b>application/octet-stream</b>".  If an Accept header is empty, then according to the HTTP specification, the Accept header is equivalent to &#42;/&#42; which is a wildcard that matches anything.</p>

<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Important Note</b><br />Note that the resource method ultimately has control over the response content. If a javax.ws.rs.core.Response is returned, then the developer can return whatever Content-Type is desired. The @Consumes and @Produces is primarily useful only when processing request information and determining which resource method is possible to invoke. If a specific Response content type is not specified via a returned javax.ws.rs.core.Response object, the response media type is determined by a combination of the @Produces annotation values and the available MessageBodyWriters for the response entity's Java type. This can lead to undesired results if there is no @Produces annotation or if the @Produces annotation has multiple media types listed.</td></tr></table></div>
<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the JAX-RS specification for the effective algorithm used.</td></tr></table></div>

<p><a name="JAX-RSRequestandResponseEntities-JAXRSStandardEntityProviders"></a></p>

<h3><a name="JAX-RSRequestandResponseEntities-JAXRSStandardEntityParameterTypes"></a>JAX-RS Standard Entity Parameter Types</h3>

<p>JAX-RS requires certain parameters to be supported for virtually any content type.  The following table lists the supported content types:</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Java Type </th>
<th class='confluenceTh'> Content Type Supported </th>
<th class='confluenceTh'> Special Notes </th>
</tr>
<tr>
<td class='confluenceTd'> java.lang.String </td>
<td class='confluenceTd'> &#42;/&#42; </td>
</tr>
<tr>
<td class='confluenceTd'> byte[] </td>
<td class='confluenceTd'> &#42;/&#42; </td>
</tr>
<tr>
<td class='confluenceTd'> java.io.InputStream </td>
<td class='confluenceTd'> &#42;/&#42; </td>
</tr>
<tr>
<td class='confluenceTd'> java.io.Reader </td>
<td class='confluenceTd'> &#42;/&#42; </td>
</tr>
<tr>
<td class='confluenceTd'> java.io.File </td>
<td class='confluenceTd'> &#42;/&#42; </td>
</tr>
<tr>
<td class='confluenceTd'> javax.activation.DataSource </td>
<td class='confluenceTd'> &#42;/&#42; </td>
</tr>
<tr>
<td class='confluenceTd'> javax.xml.transform.Source </td>
<td class='confluenceTd'> text/xml, application/xml, application/*+xml </td>
</tr>
<tr>
<td class='confluenceTd'> javax.xml.bind.JAXBElement<br clear="all" />
 and JAXB classes </td>
<td class='confluenceTd'> text/xml, application/xml, application/*+xml </td>
</tr>
<tr>
<td class='confluenceTd'> javax.ws.rs.core<br clear="all" />
 .MultivaluedMap<br clear="all" />
 &lt;String, String&gt; </td>
<td class='confluenceTd'> application/x-www-form-urlencoded </td>
</tr>
<tr>
<td class='confluenceTd'> javax.ws.rs<br clear="all" />
 .core.StreamingOutput </td>
<td class='confluenceTd'> &#42;/&#42; </td>
<td class='confluenceTd'> As a writer only </td>
</tr>
</tbody></table>

<p>Developers can use the previous Java types as entity parameters for requests and responses.</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">@Path(<span class="code-quote">"/example"</span>)
<span class="code-keyword">public</span> class RootResource {

    @GET
    @Produces(<span class="code-quote">"text/xml"</span>)
    <span class="code-keyword">public</span> Response getInfo() {
        <span class="code-object">byte</span>[] entity = /* get the entity into a <span class="code-object">byte</span> array */
        <span class="code-keyword">return</span> Response.ok(entity).type(<span class="code-quote">"text/xml"</span>).build();
    }

    @POST
    @Consumes(<span class="code-quote">"application/json"</span>)
    @Produces(<span class="code-quote">"application/json"</span>)
    <span class="code-keyword">public</span> StreamingOutput createItem(InputStream requestBodyStream) {
        /* read the requestBodyStream like a normal input stream */
        <span class="code-keyword">return</span> <span class="code-keyword">new</span> StreamingOutput() {

            <span class="code-keyword">public</span> void write(OutputStream output) <span class="code-keyword">throws</span> IOException, WebApplicationException {
                <span class="code-object">byte</span>[] out = /* get some bytes to write */
                output.write(out);
            }
        })
    }
}
</pre>
</div></div>
<p><a name="JAX-RSRequestandResponseEntities-TransferEncoding"></a></p>

<h3><a name="JAX-RSRequestandResponseEntities-TransferEncoding"></a>Transfer Encoding</h3>

<p>Transfer or "<b>chunked</b>" encoding is handled by the container for incoming requests.  The container or the application must do any transfer encoding for outgoing responses.</p>

<p><a name="JAX-RSRequestandResponseEntities-ContentEncoding"></a></p>

<h3><a name="JAX-RSRequestandResponseEntities-ContentEncoding"></a>Content Encoding</h3>

<p>Content for example "<b>gzip</b>" and or "<b>deflate</b>" encoding is handled by the application.  However, some containers handle content encoding for developers and will uncompress content automatically or will with various configuration set.  Check the  container documentation.</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>