<!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>