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

				    <h1><a name="2ApacheWinkBuildingBlocks-ApacheWinkBuildingBlocks"></a>Apache Wink Building Blocks</h1>

<p>In order to take full advantage of Apache Wink, a basic understanding of the building blocks that comprise it and their functional integration is required. The following section provides an introduction to the&nbsp; basic concepts and building blocks of Apache Wink, version 1.0. In order to gain in-depth understandings of the building blocks refer to the table of contents where these concepts are expanded and addtional example are used to further illustrate the Apache Wink and JAX-RS SDK technologies.</p>


<h2><a name="2ApacheWinkBuildingBlocks-Thissectioncontainsthefollowingtopics%3A"></a>This section contains the following topics:</h2>


<h4><a name="2ApacheWinkBuildingBlocks-ServiceImplementationBuildingBlocks"></a>Service Implementation Building Blocks</h4>

<ul>
	<li><a href="#2ApacheWinkBuildingBlocks-Resource">Resource</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-Providers">Providers</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-URIDispatching">URI Dispatching</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-Assets">Assets</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-Annotations">Annotations</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-URLHandling">URL Handling</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-HTTPMethodsGET%2CPOST%2CPUT%2CDELETEandOPTIONS">HTTP Methods - GET, POST, PUT, DELETE and OPTIONS</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-BasicURLQueryParameters">Basic URL Query Parameters</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-ApacheWinkBuildingBlocksSummary">Apache Wink Building Blocks Summary</a></li>
</ul>


<h4><a name="2ApacheWinkBuildingBlocks-ClientComponentsBuildingBlocks"></a>Client Components Building Blocks</h4>



<ul>
	<li><a href="#2ApacheWinkBuildingBlocks-RestClientClass">RestClient Class</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-ResourceInterface">Resource Interface</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-ClientRequestInterface">ClientRequest Interface</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-ClientResponseInterface">ClientResponse Interface</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-ClientConfigClass">ClientConfig Class</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-ClientHandlerInterface">ClientHandler Interface</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-InputStreamAdapterInterface">InputStreamAdapter Interface</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-OutputStreamAdapterInterface">OutputStreamAdapter Interface</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-EntityTypeClass">EntityType Class</a></li>
</ul>



<h4><a name="2ApacheWinkBuildingBlocks-TheApacheWinkRuntime"></a>The Apache Wink Runtime</h4>

<ul>
	<li><a href="#2ApacheWinkBuildingBlocks-RequestProcessor">Request Processor</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-DeploymentConfiguration">Deployment Configuration</a></li>
	<li><a href="#2ApacheWinkBuildingBlocks-HandlerChains">Handler Chains</a></li>
</ul>


<p><br clear="all" /></p>
<hr />
<h1><a name="2ApacheWinkBuildingBlocks-ServiceImplementationBuildingBlockOverview"></a>Service Implementation Building Block Overview</h1>

<p>As mentioned in the "<b>Apache Wink Introduction</b>" section, Apache Wink 1.0 reflects the design principles of a REST web service. It does so by providing the developer with a set of java classes that enable the implementation of "<b>Resources</b>", "<b>Representations</b>" and the association between them. Wink 1.0 also enables the developer to define the resource URI and the "<b>Uniform methods</b>" that are applicable to the resource.</p>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-Resource"></a>Resource</h2>

<p>A "<b>resource</b>" represents a serviceable component that enables for the retrieval and manipulation of data. A "<b>resource class</b>" is used to implement a resource by defining the "<b>resource methods</b>" that handle requests by implementing the business logic. A resource is bound or anchored to a URI space by annotating the resource class with the @Path annotation.</p>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-Providers"></a>Providers</h2>

<p>A provider is a class that is annotated with the @Provider annotation and implements one or more interfaces defined by the JAX-RS specification. Providers are not bound to any specific resource. The appropriate provider is automatically selected by the Apache Wink runtime according to the JAX-RS specification.  Apache Wink supplies many providers, however, application developers may supply their own which take precedence over any provider in the default runtime.</p>

<p>There are three types of providers defined by the JAX-RS specification:</p>
<ul>
	<li>Entry Providers</li>
	<li>Context Providers</li>
	<li>Exception Mapping Provider</li>
</ul>


<h3><a name="2ApacheWinkBuildingBlocks-EntityProvider"></a>Entity Provider</h3>

<p>An "<b>Entity Provider</b>" is a class that converts server data into a specific format requested by the client and/or converts a request transmitted by the client into server data. For instance, a String entity provider can turn request entities (message bodies) over the wire into a Java type (java.lang.String).  Entity providers can also turn native Java types such as a java.lang.String into an appropriate response entity.  An entity provider can be restricted to support a limited set of media types using the @javax.ws.rs.Produces and @javax.ws.rs.Consumes annotations. An entity provider is configured to handle a specific server data type by implementing the javax.ws.rs.ext.MessageBodyWriter and/or javax.ws.rs.ext.MessageBodyReader interfaces.</p>

<p><b>Figure 2: Entity Provider Diagram</b></p>

<p>&nbsp; <img src="attachments/2329360/2523203.jpg" align="absmiddle" border="0"/></p>

<h3><a name="2ApacheWinkBuildingBlocks-ContextProvider"></a>Context Provider</h3>

<p>Context providers are used to supply contexts to resource classes and other providers by implementing the javax.ws.rs.ext.ContextResolver interface. For example, if a custom JAXBContext is required to serialize or deserialize JAXB objects, an application can provide a ContextResolver that will return a specific instance of a JAXBContext.  Context providers may restrict the media types that they support using the @javax.ws.rs.Produces annotation.</p>

<p><b>Figure 3: Context Provider Diagram</b></p>

<p> <img src="attachments/2329360/3113002.jpg" align="absmiddle" border="0"/></p>


<h3><a name="2ApacheWinkBuildingBlocks-ExceptionMappingProvider"></a>Exception Mapping Provider</h3>

<p>Exception mapping providers map exceptions into an instance of a javax.ws.rs.core.Response by implementing the javax.ws.rs.ext.ExceptionMapper interface. The Response objects can contain response information such as status codes, HTTP headers, and a response entity (message body).  When a resource method throws an exception, the runtime will try to find a suitable ExceptionMapper to "translate" the exception to an appropriate Response object.</p>

<p><b>Figure 4: Exception Mapping Provider Diagram</b></p>

<p> <img src="attachments/2329360/3113003.jpg" align="absmiddle" border="0"/></p>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-URIDispatching"></a>URI Dispatching</h2>

<p>Designing an efficient REST web service requires that the application developer understands the resources that comprise the service, how to best identify the resources, and how they relate to one another.</p>

<p>RESTful resources are identified by URIs in most cases related resources have URIs that share common path elements.</p>

<p><b>Figure 5: Apache Wink Logic Flow</b></p>

<p> <img src="attachments/2329360/2523204.jpg" align="absmiddle" border="0" height="406" width="492"/></p>


<h4><a name="2ApacheWinkBuildingBlocks-ApacheWinkLogicFlow"></a>Apache Wink Logic Flow</h4>

<p>Figure 5 illustrates the Apache Wink logic flow. The HTTP request sent by the client invokes the "<b>Apache Wink REST Servlet</b>". The REST servlet uses the "<b>Request Processor</b>" and the request URI in order to find, match and invoke the correct resource method.</p>

<h3><a name="2ApacheWinkBuildingBlocks-BookmarksExample"></a>Bookmarks Example</h3>

<p>Throughout this document, various project examples are used in order to describe the functionality and processes that comprise the Apache Wink.<br/>
In order to explain the REST design principles used in the Apache Wink this developer guide refers to the "<b>Bookmark</b>" example project found in the examples folder located in the Apache Wink distribution.</p>

<p>Refer to the code (using an IDE application) in the example in conjunction with the following explanations and illustrations in this developer guide.</p>

<h4><a name="2ApacheWinkBuildingBlocks-ApacheWinkServletandRequestProcessor"></a>Apache Wink Servlet and Request Processor</h4>

<p><b>Figure 6:&nbsp; Apache Wink REST Servlet and Request Processor for the Bookmark Services</b></p>

<p> <img src="attachments/2329360/2523205.jpg" align="absmiddle" border="0" height="421" width="500"/></p>



<h4><a name="2ApacheWinkBuildingBlocks-ServerandRequestProcessor"></a>Server and Request Processor</h4>

<p>Figure 6 shows the Apache Wink servlet and request Processor concept in the context of the application server. In the "<b>Bookmarks</b>" example in Figure 6 there are two Resources, the first Resource is associated with the <b>/mybookmarks</b> URI and manages the bookmarks collection, the second resource is associated with the <b>/mybookmarks/{bookmark}</b> Resources and manages an individual bookmark within the collection.</p>

<p>The Resources' defined by the web service and managed by Apache Wink are referred to as <b>"URI space"</b>. The Resources space is the collection of all URI's that exist in the same context. Figure 6 shows the URI space that contains <b>/mybookmarks</b> and <b>/mybookmarks/{bookmarks}</b>.</p>

<h4><a name="2ApacheWinkBuildingBlocks-URISpace"></a>URI Space</h4>

<p>The Bookmarks service URI space consists of the following URI space items and detailed descriptions about their context and functionality.<br/>
<b>Table 1: URI Management</b></p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> URI space Item <br clear="all" /> </th>
<th class='confluenceTh'> Description <br clear="all" /> </th>
</tr>
<tr>
<td class='confluenceTd'> <b>/Bookmark/rest</b> <br clear="all" /> </td>
<td class='confluenceTd'> This URI is the root context of the bookmark service and the entry point of the URI space of the service. An HTTP GET request to this URI returns a "Service Document" which is automatically generated by Apache Wink. The service document provides information about all available collections in the URI space. <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> <b>/Bookmark/rest /mybookmarks</b> <br clear="all" /> </td>
<td class='confluenceTd'> This URI is associated with a collection of bookmarks resources.&nbsp; Clients use the HTTP GET method in order to retrieve a representation of the collection and HTTP POST method in order to create a new item in the collection. <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> <b>/Bookmark/rest /mybookmarks/{bookmark}</b> </td>
<td class='confluenceTd'> This URI template is associated with a single bookmark resource. Clients use the HTTP GET method in order to retrieve a representation of the resource, HTTP PUT method is used in order to update the resource and HTTP DELETE method is used in order to delete the resource. <br clear="all" /> </td>
</tr>
</tbody></table>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-Assets"></a>Assets</h2>

<p>Assets are classes that contain "<b>web service business logic</b>" implemented by the developer. Each Asset is associated with one or more URI. The Apache Wink dispatcher invokes the Asset, which is associated with the URI found in the HTTP request.</p>

<p>An Asset class can implement one or more methods, each method is associated with a single HTTP method (GET, HEAD, POST, PUT, DELETE etc).&nbsp; The methods can be associated with a MIME type of a produced representation. Methods that handle HTTP verbs of requests with a body (such as PUT, POST) are also associated with the MIME type of the HTTP request.<br/>
The Asset class can be registered to the Apache Wink using the "Spring context xml" or by using a registration API.</p>



<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>Spring Context Configuration</b><br />For further information regarding the Spring Context, refer to <a href="5.5 Spring Integration.html" title="5.5 Spring Integration">5.5 Spring Integration</a> in section 5 Apache Wink Server.</td></tr></table></div><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-Annotations"></a>Annotations</h2>

<p>Annotations are a special text notations, or metadata, added to Java version 1.5. Annotations in Java source code can affect both compilation and runtime behavior of the resulting Java classes.<br/>
JAX-RS is implemented by the use of annotations that are defined in the JAX-RS specification. Apache Wink provides a set of additional annotations that enrich the functionality of the JAX-RS enabled application.</p>

<p>The following table describes the additional Apache Wink annotations:</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Annotation <br clear="all" /> </th>
<th class='confluenceTh'> Precedes <br clear="all" /> </th>
<th class='confluenceTh'> Description <br clear="all" /> </th>
</tr>
<tr>
<td class='confluenceTd'> @Workspace <br clear="all" /> </td>
<td class='confluenceTd'> Resource <br clear="all" /> </td>
<td class='confluenceTd'> Associate a "Collection Resource" with a workspace element and collection elements in an APP Service Document <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> @Scope <br clear="all" /> </td>
<td class='confluenceTd'> Resource /Provider <br clear="all" /> </td>
<td class='confluenceTd'> Defines the default lifecycle behavior for resources and providers, and the option for controlling the lifecycle through the javax.ws.rs.core.Application class <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> @Parent <br clear="all" /> </td>
<td class='confluenceTd'> Resource <br clear="all" /> </td>
<td class='confluenceTd'> Provides the ability to define a base template URI for the URI specified in a resources @Path annotation <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> @Asset <br clear="all" /> </td>
<td class='confluenceTd'> Class <br clear="all" /> </td>
<td class='confluenceTd'> Used by the Apache Wink runtime in order to identify an entity as an Asset <br clear="all" /> </td>
</tr>
</tbody></table>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-URLHandling"></a>URL Handling</h2>

<p>The Apache Wink receives HTTP requests and then dispatches a wrapped HTTP request to the appropriate Resource method.<br/>
The HTTP request is match to the Resource method based on the HTTP request parameters, the Resource method definitions and the MIME type.</p>

<p><b>Figure 7: URL Request Handling</b></p>

<p> <img src="attachments/2329360/2523210.jpg" align="absmiddle" border="0" height="431" width="425"/></p>


<h4><a name="2ApacheWinkBuildingBlocks-RequestHandling"></a>Request Handling</h4>

<p>Figure 7 demonstrates the HTTP Client request path to the URI dispatcher, once the dispatcher receives the request it is then matched according to the HTTP method, URL and MIME type and finally the Resource registry definition.</p>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-HTTPMethodsGET%2CPOST%2CPUT%2CDELETEandOPTIONS"></a>HTTP Methods - GET, POST, PUT, DELETE and OPTIONS</h2>

<p>The common HTTP 1.1 methods for the Apache Wink are defined in the following section. This set of methods can be expanded.</p>

<h3><a name="2ApacheWinkBuildingBlocks-MethodUsage"></a>Method Usage</h3>

<p><b>Table 3: HTTP Methods</b></p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Method <br clear="all" /> </th>
<th class='confluenceTh'> Safe <br clear="all" /> </th>
<th class='confluenceTh'> Idempotent <br clear="all" /> </th>
<th class='confluenceTh'> Cacheable <br clear="all" /> </th>
</tr>
<tr>
<td class='confluenceTd'> GET <br clear="all" /> </td>
<td class='confluenceTd'> X <br clear="all" /> </td>
<td class='confluenceTd'> X <br clear="all" /> </td>
<td class='confluenceTd'> X <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> HEAD <br clear="all" /> </td>
<td class='confluenceTd'> X <br clear="all" /> </td>
<td class='confluenceTd'> X <br clear="all" /> </td>
<td class='confluenceTd'> X <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> PUT <br clear="all" /> </td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'> X <br clear="all" /> </td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'> POST <br clear="all" /> </td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'> &#42; <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> DELETE <br clear="all" /> </td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'> X <br clear="all" /> </td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'> OPTIONS <br clear="all" /> </td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
</tbody></table>

<h4><a name="2ApacheWinkBuildingBlocks-KeyX"></a>Key - X</h4>


<ul>
	<li><b>Safe</b> &#45; does not affect the server state</li>
	<li><b>Idempotent</b> &#45; a repeated application of the same method has the same effect as a single application</li>
	<li><b>Cacheable</b> &#45; a response to a method is cacheable if it meets the requirements for HTTP caching</li>
	<li><b>&#42;</b> &#45;&nbsp;&nbsp; Responses to this method are not cacheable, unless the response includes an appropriate Cache-Control or Expires header fields. However, the 303 response can be used to direct the user agent to retrieve a cacheable resource.</li>
</ul>


<h3><a name="2ApacheWinkBuildingBlocks-GET"></a>GET</h3>

<p>The GET method is used to retrieve information from a specified URI and is assumed to be a safe and repeatable operation by browsers, caches and other HTTP aware components. This means that the operation must have no side effects and GET method requests can be re-issued.</p>

<h3><a name="2ApacheWinkBuildingBlocks-HEAD"></a>HEAD</h3>

<p>The HEAD method is the same as the GET method except for the fact that the HEAD does not contain message body.</p>

<h3><a name="2ApacheWinkBuildingBlocks-POST"></a>POST</h3>

<p>The POST method is used for operations that have side effects and cannot be safely repeated. For example, transferring money from one bank account to another has side effects and should not be repeated without explicit approval by the user.</p>

<p>The POST method submits data to be processed, for example, from an HTML form, to the identified resource. The data is included in the body of the request. This may result in the creation of a new resource or the updates of existing resources or both.</p>

<h3><a name="2ApacheWinkBuildingBlocks-PUT"></a>PUT</h3>

<p>The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity should be considered as a modified version of the one residing on the origin server.</p>

<p>If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI.</p>


<h3><a name="2ApacheWinkBuildingBlocks-DELETE"></a>DELETE</h3>

<p>The DELETE method requests that the origin server delete the resource identified by the Request-URI. This method can be overridden on the origin server.<br/>
The client cannot be guaranteed that the operation has been carried out, even if the status code returned from the origin server indicates that the action has been completed successfully.</p>


<h3><a name="2ApacheWinkBuildingBlocks-OPTIONS"></a>OPTIONS</h3>

<p>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.<br/>
This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</p>


<h3><a name="2ApacheWinkBuildingBlocks-BasicURLQueryParameters"></a>Basic URL Query Parameters</h3>

<p>A URL parameter is a name and value pair appended to a URL. The parameter begins with a question mark "<b>?</b>" and takes the form of name=value.<br/>
If more than one URL parameter exists, each parameter is separated by an ampersand "<b>&amp;</b>" symbol. URL parameters enable the client to send data as part of the URL to the server.</p>

<p>When a server receives a request and parameters are appended to the URL of the request, the server uses these parameters as if they were sent as part of the request body. There are several predefined URL parameters recognized by Apache Wink when using Wink providers. The following table lists the parameters commonly used in web service URLs. These special URL parameters are defined in the "<b>RestConstants</b>" class.</p>

<h4><a name="2ApacheWinkBuildingBlocks-QueryParameters"></a>Query Parameters</h4>

<p><b>Table 4: URL Parameters</b></p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Parameter <br clear="all" /> </th>
<th class='confluenceTh'> Description <br clear="all" /> </th>
<th class='confluenceTh'> Value <br clear="all" /> </th>
</tr>
<tr>
<td class='confluenceTd'> alt <br clear="all" /> </td>
<td class='confluenceTd'> Provides an alternative representation of the specified MIME type. Apache Wink recognizes this as a representation request of the highest priority. <br clear="all" /> </td>
<td class='confluenceTd'> MIME type, e.g. <br clear="all" />
"text%2Fplain" <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> absolute-urls <br clear="all" /> </td>
<td class='confluenceTd'> Indicates to Apache Wink that the generated&nbsp; links in the response should be absolute, mutual exclusive with the relative-urls parameter <br clear="all" /> </td>
<td class='confluenceTd'> NONE <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> relative-urls <br clear="all" /> </td>
<td class='confluenceTd'> Indicates to Apache Wink that the generated&nbsp; links in the response should be relative, mutual exclusive with the absolute-urls parameter <br clear="all" /> </td>
<td class='confluenceTd'> NONE <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> callback <br clear="all" /> </td>
<td class='confluenceTd'> Wrap javascript representation in callback function, is relevant when requested with an application/json MIME type. <br clear="all" /> </td>
<td class='confluenceTd'> name of callback function. <br clear="all" />
For example, "myfunc" <br clear="all" /> </td>
</tr>
</tbody></table>

<h5><a name="2ApacheWinkBuildingBlocks-CombiningURLParameters"></a>Combining URL Parameters</h5>

<p>A single URL can contain more than one URL parameter, example <b>"?alt=text%2Fjavascript &amp;callback=myfunc"</b>(where "%2F" represents escaped "/").</p>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-ApacheWinkBuildingBlocksSummary"></a>Apache Wink Building Blocks Summary</h2>

<p>The previous section "<b>Service Implementation Building Blocks</b>" outlines the basic precepts and building blocks that comprise the service side of Apache Wink.<br/>
In order to understand the relationship between the building blocks that comprise Apache Wink a set of example applications have been designed and built that provide a reference point that demonstrate a rudimentary understanding about the functionality of Apache Wink.</p>

<h3><a name="2ApacheWinkBuildingBlocks-ApacheWinkExamples"></a>Apache Wink Examples</h3>

<p>The following examples applications are used in this "<b>Apache Wink Developer Guide</b>".</p>

<ul>
	<li>Bookmarks</li>
	<li>HelloWorld</li>
	<li>QADefects</li>
</ul>


<h4><a name="2ApacheWinkBuildingBlocks-BookmarksProject"></a>Bookmarks Project</h4>

<p>This developer guide uses the bookmarks example application in order to describe the logic flow process within Apache Wink.<br/>
Refer to the comments located in the "<b>Bookmarks</b>" example application code for in-depth explanations about the methods used to build the bookmarks application.</p>

<h4><a name="2ApacheWinkBuildingBlocks-HelloWorldProject"></a>HelloWorld Project</h4>

<p>Complete the step-by-step "<b>HelloWorld</b>" tutorial in chapter 3 "<b>Getting Started with Apache Wink</b>" and then follow the installation instructions on page xx, in order to view the "<b>Bookmarks</b>" example application from within the Eclipse IDE.</p>

<h4><a name="2ApacheWinkBuildingBlocks-QADefects"></a>QADefects</h4>

<p>The QADefects example application illustrates the advanced functionality of Apache Wink by implementing most of the features provided by the Apache Wink (Runtime) framework.</p>

<p><br clear="all" /></p>
<hr />
<h1><a name="2ApacheWinkBuildingBlocks-ApacheWinkClientComponentBasicsOverview"></a>Apache Wink Client Component Basics Overview</h1>

<p>The Apache Wink Client interacts with REST Web-Services. It maps REST concepts to Java classes and encapsulates underlying REST related standards and protocols, as well as providing a plug-in mechanism for raw HTTP streaming data manipulation. This mechanism also provides the ability to embed cross application functionality on the client side, such as security, compression and caching.</p>


<p><b>Figure 8: Apache Wink Client Simplified Breakdown</b></p>

<p><img src="attachments/2329360/3113001.jpg" align="absmiddle" border="0"/></p>





<p><b>Figure 8</b>: The illustration shows the basic elements that comprise the Apache Wink Client. The Apache Wink Client utilizes the providers mechanism defined by the JAX-RS specification to perform reading and writing of java objects. The Apache Wink Client is pre-initialized with the same providers that are predefined by the Apache Wink JAX-RS server implementation.</p>

<p><br clear="all" /></p>
<hr />
<h1><a name="2ApacheWinkBuildingBlocks-ApacheWinkClientComponents"></a>Apache Wink Client Components</h1>

<p>The Apache Wink Client is comprised of several key elements that together create a simple and convenient framework for the consumption of REST based web services. The client is an abstraction of REST concepts modeled into simple java classes that encapsulate the underlying HTTP protocol, used for the service invocation.</p>

<p>The Apache Wink Client uses the java HttpURLConnection class for the HTTP invocation. The Apache Wink Client also provides a module that utilizes the Apache HTTP Client instead of the default HttpURLConnection class.</p>

<p>The following section provides an overview of the key elements and classes that comprise the Apache Wink Client.</p>

<h2><a name="2ApacheWinkBuildingBlocks-RestClientClass"></a>RestClient Class</h2>

<p>The RestClient class is the central access point to Apache Wink Client. It provides the user with functionality that enables the creation of new Resource instances. The RestClient provides the user with the ability to set different configuration parameters and custom JAX-RS providers and propagates them to the created resources.</p>

<h2><a name="2ApacheWinkBuildingBlocks-ResourceInterface"></a>Resource Interface</h2>

<p>The Resource interface represents a single web resource located at a specific URL, enabling for the manipulation and retrieval of the resource by the invocation of different HTTP methods on the resource instance. The resource interface is implemented following the Builder design pattern so method calls can be easily aggregated and in order to enable easy construction of requests and setting of the resource properties prior to invocation.</p>

<h2><a name="2ApacheWinkBuildingBlocks-ClientRequestInterface"></a>ClientRequest Interface</h2>

<p>The ClientRequest interface represents a request issued by invoking any one of the invocation methods on a Resource. An instance of a ClientRequest is created at the beginning of an invocation and passed to all the client handlers defined on the client that was used for the invocation.</p>

<h2><a name="2ApacheWinkBuildingBlocks-ClientResponseInterface"></a>ClientResponse Interface</h2>

<p>The ClientResponse interface represents an HTTP response that is received after invoking any one of the invocation methods on a Resource. An instance of a ClientResponse is created by the ConnectionHandler at the end of the handler chain, and is returned from every handler on the chain.</p>

<h2><a name="2ApacheWinkBuildingBlocks-ClientConfigClass"></a>ClientConfig Class</h2>

<p>The ClientConfig class provides client configuration when instantiating a new RestClient. The ClientConfig is implemented using the Builder design pattern so method calls can be easily aggregated. Custom Providers and client Handlers are set on the ClientConfig instance prior to the creation of the RestClient.</p>

<h2><a name="2ApacheWinkBuildingBlocks-ClientHandlerInterface"></a>ClientHandler Interface</h2>

<p>Client handlers are used to incorporate cross invocation functionality. The ClientHandler interface is implemented by client handlers, and the handle() method is invoked for every request invocation in order to allow the handler to perform custom actions during the request invocation.</p>


<h2><a name="2ApacheWinkBuildingBlocks-InputStreamAdapterInterface"></a>InputStreamAdapter Interface</h2>

<p>The InputStreamAdapter interface is used to wrap the response input stream with another input stream in order to allow the manipulation of the response entity stream. The adapt() method is called after reading the response status code and response headers, and before returning to the ClientResponse to the handlers on the chain.</p>

<h2><a name="2ApacheWinkBuildingBlocks-OutputStreamAdapterInterface"></a>OutputStreamAdapter Interface</h2>

<p>The OutputStreamAdapter interface is used to wrap the request output stream with another output stream to allow the manipulation of the request entity stream. The adapt() method is called before writing the request headers to allow the adapter to manipulate the request.</p>

<h2><a name="2ApacheWinkBuildingBlocks-EntityTypeClass"></a>EntityType Class</h2>

<p>The EntityType is used to specify the class type and the generic type of responses. Typically, an anonymous "<b>EntityType</b>" instance is created in order to specify the response type, as is shown in the following code example:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">Resource resource = client.resource(uri);
List&lt;<span class="code-object">String</span>&gt; list = resource.get(<span class="code-keyword">new</span> EntityType&lt;List&lt;<span class="code-object">String</span>&gt;&gt;() {});
</pre>
</div></div>

<h2><a name="2ApacheWinkBuildingBlocks-ApacheHttpClientConfigClass"></a>ApacheHttpClientConfig Class</h2>

<p>The "<b>ApacheHttpClientConfig</b>" Configuration object configures the Apache Wink Client to use the Apache HttpClient as the underlying HTTP client. The following code snippet, demonstrates the typical usage:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-comment">// creates the client that uses Apache DefaultHttpClient as the underlying Http client.
</span>RestClient client = <span class="code-keyword">new</span> RestClient(<span class="code-keyword">new</span> ApacheHttpClientConfig(<span class="code-keyword">new</span> DefaultHttpClient()));

<span class="code-comment">// creates the resource
</span>Resource resource = client.resource(<span class="code-quote">"http:<span class="code-comment">//myhost:80/my/service"</span>);
</span>
<span class="code-comment">// invokes a GET method on the resource and receives the response entity as a string
</span><span class="code-object">String</span> entity = resource.get(<span class="code-object">String</span>.class);
...
</pre>
</div></div>
<p><br clear="all" /></p>
<hr />
<h1><a name="2ApacheWinkBuildingBlocks-TheApacheWinkRuntime"></a>The Apache Wink Runtime</h1>

<p>The Apache Wink runtime is deployed on a JEE environment and is configured by defining the RestServlet in the web.xml file of the application. This servlet is the entry point of all the HTTP requests targeted for web services, and passes the request and response instances to the Wink engine for processing.</p>

<p><b>Figure 9: Apache Wink Request Processor</b> <b>Architecture</b><br/>
<img src="attachments/2329360/2523215.jpg" align="absmiddle" border="0" height="312" width="490"/></p>

<p>The diagram illustrates the core components of the Apache Wink runtime. The Wink engine is the RequestProcessor. It builds an instance of a MessageContext with all of the required information for the request and passes it through the engine handler chains. The handler chains are responsible for serving the request, invoking the required resource method and finally generating a response.<br/>
In case of an error, the RequestProcessor invokes the Error chain with the generated exception for producing the appropriate response.<br/>
The Apache Wink runtime maintains providers and resources in two registries, the "<b>providers registry</b>" and the "resource registry" utilizing them during request processing.</p>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-RequestProcessor"></a>Request Processor</h2>

<p>The RequestProcessor is the Apache Wink engine, that is initialized by the RestServlet and is populated with an instance of a DeploymentConfiguration.<br/>
When a request is passed to the handleRequest() method of the RequestProcessor, a new instance of a&nbsp; MessageContext is created.<br/>
The MessageContext contains all of the information that is required for the Wink runtime to handle the request. The RequestProcessor first invokes the Request Handler Chain and then the Response Handler Chain.</p>

<p>If an exception occurs during any stage of the request processing, the RequestProcessor invokes the Error Handler Chain for processing the exception.</p>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-DeploymentConfiguration"></a>Deployment Configuration</h2>

<p>The Apache Wink runtime is initialized with an instance of a Deployment Configuration. The Deployment Configuration holds the runtime configuration, including the handler chains, registries, configuration properties.<br/>
The Deployment Configuration is initialized with an instance of a JAX-RS Application used for obtaining user resources and providers.</p>

<p><br clear="all" /></p>
<hr />
<h3><a name="2ApacheWinkBuildingBlocks-CustomizationoftheHandlersChain"></a>Customization of the Handlers Chain</h3>

<p>The handler chain is customized by extending the org.apache.wink.server.handlers.HandlersFactory class, overriding specific methods and specifying the new class in the web.xml file of the application.<br/>
In order to specify a different HandlersFactory class instead of the default handlers, specify an init parameter for a custom properties file to be loaded by the RestServlet.  Then, the value of the wink.handlersFactoryClass property must be set as the fully qualified name of the customized handlers class in the properties file.</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml"><span class="code-tag">&lt;servlet&gt;</span>
 <span class="code-tag">&lt;servlet-name&gt;</span>restSdkService<span class="code-tag">&lt;/servlet-name&gt;</span>
 <span class="code-tag">&lt;servlet-class&gt;</span>
 org.apache.wink.server.internal.servlet.RestServlet
 <span class="code-tag">&lt;/servlet-class&gt;</span>
 <span class="code-tag">&lt;init-param&gt;</span>
 <span class="code-tag">&lt;param-name&gt;</span>propertiesLocation<span class="code-tag">&lt;/param-name&gt;</span>
 <span class="code-tag">&lt;param-value&gt;</span>path/to/my-wink-properties.properties<span class="code-tag">&lt;/param-value&gt;</span>
 <span class="code-tag">&lt;/init-param&gt;</span>
<span class="code-tag">&lt;/servlet&gt;</span>
</pre>
</div></div>
<p>In the my-wink-properties properties file:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">wink.handlersFactoryClass=org.apache.wink.MyCustomHandlersFactory
</pre>
</div></div>
<p>See the JavaDoc for the HandlersFactory API.</p>

<p><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-HandlerChains"></a>Handler Chains</h2>

<p>The handler chain pattern is used by the Wink runtime for implementing the core functionalities.<br/>
There are three handler chains utilized by the Wink runtime:</p>

<ul>
	<li>RequestHandlersChain</li>
	<li>ResponseHandlersChain</li>
	<li>ErrorHandlersChain</li>
</ul>



<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>Handler Chains</b><br />For further information regarding the "<b>Handler Chains</b>", refer to section 5 <b>Apache Wink Server</b>, <a href="5.7 Handler Chain - Runtime Extension.html" title="5.7 Handler Chain - Runtime Extension">5.7 Handler Chain - Runtime Extension</a> </td></tr></table></div><br clear="all" /></p>
<hr />
<h2><a name="2ApacheWinkBuildingBlocks-Registries"></a>Registries</h2>

<p>The Apache Wink runtime utilizes two registries for maintaining the JAX-RS resources and providers. Both registries maintain their elements in a sorted state according to the JAX-RS specification for increasing performance during request processing. In addition to the JAX-RS specification sorting, Wink supports the prioritization of resources and providers.</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>Resources and Providers Prioritization</b><br />For further information regarding &#42;"<b>Resources and Providers Prioritization</b>", refer to the section <a href="5.1 Registration and Configuration.html#5.1RegistrationandConfiguration-Priorities">5.1 Registration and Configuration</a>. </td></tr></table></div>

<h3><a name="2ApacheWinkBuildingBlocks-ResourceRegistry"></a>Resource Registry</h3>

<p><b>Firgure 10: Resource Registry Architecture</b><br/>
<img src="attachments/2329360/2523216.jpg" align="absmiddle" border="0"/></p>

<p>The resources registry maintains all of the root resources in the form of Resource Records.<br/>
A Resource Record holds the following:</p>
<ul>
	<li><b>URI Template Processor</b> &#45; represents a URI template associated with a resource. Used during the resource matching process.</li>
	<li><b>Resource Metadata</b> &#45; holds the resource metadata collected from the resource annotations.</li>
	<li><b>Sub-Resource Records</b> &#45; records of all the sub-resources (methods and locators) collected from the sub-resource annotations.</li>
	<li><b>Resource Factory</b> &#45; a factory that retrieves an instance of the resource in accordance to the creation method defined for the resource.<br/>
Possible creation methods include:
	<ul>
		<li>
		<ul>
			<li>singleton</li>
			<li>prototype</li>
			<li>spring configuration</li>
			<li>user customizable</li>
		</ul>
		</li>
	</ul>
	</li>
</ul>


				    					    <br/>
                        <div class="tabletitle">
                            <a name="attachments">Attachments:</a>
                        </div>

                        <div class="greybox" align="left">
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/2523203.jpg">Entity Provider.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/2523204.jpg">Apache Wink Logic Workflow.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/2523205.jpg">Servlet Dispatcher Concept 2.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/2523210.jpg">URL Handling.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/2523213.jpg">Simplified Client.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/2523212.jpg">Simplified Client.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/2523214.jpg">Simplified Client2.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/2523215.jpg">Winky Spanky Diagram.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/2523216.jpg">Resource Registry.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/3113001.jpg">Wink Client Diagram.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/3113002.jpg">Context Provider.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2329360/3113003.jpg">Exception Mapping Provider.jpg</a> (image/jpeg)
                                <br/>
                                                    </div>
				    
                    			    </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>