Author: buildbot
Date: Tue May 19 07:07:31 2015
New Revision: 951836
Log:
Staging update by buildbot for olingo
Modified:
websites/staging/olingo/trunk/content/ (props changed)
websites/staging/olingo/trunk/content/doc/odata4/tutorials/readep/tutorial_readep.html
Propchange: websites/staging/olingo/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Tue May 19 07:07:31 2015
@@ -1 +1 @@
-1680190
+1680191
Modified:
websites/staging/olingo/trunk/content/doc/odata4/tutorials/readep/tutorial_readep.html
==============================================================================
---
websites/staging/olingo/trunk/content/doc/odata4/tutorials/readep/tutorial_readep.html
(original)
+++
websites/staging/olingo/trunk/content/doc/odata4/tutorials/readep/tutorial_readep.html
Tue May 19 07:07:31 2015
@@ -267,6 +267,8 @@ This has the advantage that our final OD
<span class="n">ServiceMetadata</span> <span class="n">edm</span>
<span class="o">=</span> <span class="n">odata</span><span
class="o">.</span><span class="na">createServiceMetadata</span><span
class="o">(</span><span class="k">new</span> <span
class="n">DemoEdmProvider</span><span class="o">(),</span> <span
class="k">new</span> <span class="n">ArrayList</span><span
class="o"><</span><span class="n">EdmxReference</span><span
class="o">>());</span>
<span class="n">ODataHttpHandler</span> <span class="n">handler</span>
<span class="o">=</span> <span class="n">odata</span><span
class="o">.</span><span class="na">createHandler</span><span
class="o">(</span><span class="n">edm</span><span class="o">);</span>
<span class="n">handler</span><span class="o">.</span><span
class="na">register</span><span class="o">(</span><span class="k">new</span>
<span class="n">DemoEntityCollectionProcessor</span><span
class="o">(</span><span class="n">storage</span><span class="o">));</span>
+ <span class="o">}</span> <span class="cm">/* more code */</span>
+<span class="o">}</span>
</pre></div>
@@ -512,8 +514,10 @@ The steps to be followed in the implemen
<p><strong>Which data is requested?</strong><br />
Check the UriInfo instance for information about which
<em>EntityCollection</em> has been requested.<br />
Note that in the code, we directly access the first segment of the URI and
cast it to <code>UriResourceEntitySet</code></p>
-<p>:::java
- UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet)
resourcePaths.get(0);</p>
+<div class="codehilite"><pre><span class="n">UriResourceEntitySet</span> <span
class="n">uriResourceEntitySet</span> <span class="o">=</span> <span
class="o">(</span><span class="n">UriResourceEntitySet</span><span
class="o">)</span> <span class="n">resourcePaths</span><span
class="o">.</span><span class="na">get</span><span class="o">(</span><span
class="mi">0</span><span class="o">);</span>
+</pre></div>
+
+
<p>This is only possible, because in our current sample scenario we only
support simple URIs. In a real productive OData service, which supports
navigation and other OData V4 features, the code would be more complex.</p>
</li>
<li>
@@ -684,67 +688,67 @@ This can be realized by implementing the
<p>Configure the response<br />
When reading a property, we have to consider that the value of the
property can be empty.<br />
If this is the case, when configuring the response object, we donât
provide response body and header.</p>
-<p>:::java
-public void readPrimitive(ODataRequest request, ODataResponse response,
- UriInfo uriInfo, ContentType responseFormat)
- throws ODataApplicationException, SerializerException
{</p>
-<div class="codehilite"><pre><span class="c1">// 1. Retrieve info from
URI</span>
-<span class="c1">// 1.1. retrieve the info about the requested entity
set</span>
-<span class="n">List</span><span class="o"><</span><span
class="n">UriResource</span><span class="o">></span> <span
class="n">resourceParts</span> <span class="o">=</span> <span
class="n">uriInfo</span><span class="p">.</span><span
class="n">getUriResourceParts</span><span class="p">();</span>
-<span class="c1">// Note: only in our example we can rely that the first
segment is the EntitySet</span>
-<span class="n">UriResourceEntitySet</span> <span
class="n">uriEntityset</span> <span class="o">=</span> <span
class="p">(</span><span class="n">UriResourceEntitySet</span><span
class="p">)</span> <span class="n">resourceParts</span><span
class="p">.</span><span class="n">get</span><span class="p">(</span><span
class="mh">0</span><span class="p">);</span>
-<span class="n">EdmEntitySet</span> <span class="n">edmEntitySet</span> <span
class="o">=</span> <span class="n">uriEntityset</span><span
class="p">.</span><span class="n">getEntitySet</span><span class="p">();</span>
-<span class="c1">// the key for the entity</span>
-<span class="n">List</span><span class="o"><</span><span
class="n">UriParameter</span><span class="o">></span> <span
class="n">keyPredicates</span> <span class="o">=</span> <span
class="n">uriEntityset</span><span class="p">.</span><span
class="n">getKeyPredicates</span><span class="p">();</span>
-
-<span class="c1">// 1.2. retrieve the requested (Edm) property</span>
-<span class="c1">// the last segment is the Property</span>
-<span class="n">UriResourceProperty</span> <span class="n">uriProperty</span>
<span class="o">=</span> <span class="p">(</span><span
class="n">UriResourceProperty</span><span class="p">)</span> <span
class="n">resourceParts</span><span class="p">.</span><span
class="n">get</span><span class="p">(</span><span
class="n">resourceParts</span><span class="p">.</span><span
class="n">size</span><span class="p">()</span> <span class="o">-</span><span
class="mh">1</span><span class="p">);</span>
-<span class="n">EdmProperty</span> <span class="n">edmProperty</span> <span
class="o">=</span> <span class="n">uriProperty</span><span
class="p">.</span><span class="n">getProperty</span><span class="p">();</span>
-<span class="n">String</span> <span class="n">edmPropertyName</span> <span
class="o">=</span> <span class="n">edmProperty</span><span
class="p">.</span><span class="n">getName</span><span class="p">();</span>
-<span class="c1">// in our example, we know we have only primitive types in
our model</span>
-<span class="n">EdmPrimitiveType</span> <span class="n">edmPropertyType</span>
<span class="o">=</span> <span class="p">(</span><span
class="n">EdmPrimitiveType</span><span class="p">)</span> <span
class="n">edmProperty</span><span class="p">.</span><span
class="n">getType</span><span class="p">();</span>
-
-<span class="c1">// 2. retrieve data from backend</span>
-<span class="c1">// 2.1. retrieve the entity data, for which the property has
to be read</span>
-<span class="n">Entity</span> <span class="n">entity</span> <span
class="o">=</span> <span class="n">storage</span><span class="p">.</span><span
class="n">readEntityData</span><span class="p">(</span><span
class="n">edmEntitySet</span><span class="p">,</span> <span
class="n">keyPredicates</span><span class="p">);</span>
-<span class="k">if</span> <span class="p">(</span><span
class="n">entity</span> <span class="o">==</span> <span
class="k">null</span><span class="p">)</span> <span class="p">{</span> <span
class="c1">// Bad request</span>
- <span class="n">throw</span> <span class="k">new</span> <span
class="n">ODataApplicationException</span><span class="p">(</span><span
class="s">"Entity not found"</span><span class="p">,</span>
- <span class="n">HttpStatusCode</span><span class="p">.</span><span
class="no">NOT_FOUND</span><span class="p">.</span><span
class="n">getStatusCode</span><span class="p">(),</span> <span
class="n">Locale</span><span class="p">.</span><span
class="no">ENGLISH</span><span class="p">);</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span
class="kt">void</span> <span class="nf">readPrimitive</span><span
class="o">(</span><span class="n">ODataRequest</span> <span
class="n">request</span><span class="o">,</span> <span
class="n">ODataResponse</span> <span class="n">response</span><span
class="o">,</span>
+ <span class="n">UriInfo</span> <span
class="n">uriInfo</span><span class="o">,</span> <span
class="n">ContentType</span> <span class="n">responseFormat</span><span
class="o">)</span>
+ <span class="kd">throws</span> <span
class="n">ODataApplicationException</span><span class="o">,</span> <span
class="n">SerializerException</span> <span class="o">{</span>
-<span class="c1">// 2.2. retrieve the property data from the entity</span>
-<span class="n">Property</span> <span class="k">property</span> <span
class="o">=</span> <span class="n">entity</span><span class="p">.</span><span
class="n">getProperty</span><span class="p">(</span><span
class="n">edmPropertyName</span><span class="p">);</span>
-<span class="k">if</span> <span class="p">(</span><span
class="k">property</span> <span class="o">==</span> <span
class="k">null</span><span class="p">)</span> <span class="p">{</span>
- <span class="n">throw</span> <span class="k">new</span> <span
class="n">ODataApplicationException</span><span class="p">(</span><span
class="s">"Property not found"</span><span class="p">,</span>
- <span class="n">HttpStatusCode</span><span class="p">.</span><span
class="no">NOT_FOUND</span><span class="p">.</span><span
class="n">getStatusCode</span><span class="p">(),</span> <span
class="n">Locale</span><span class="p">.</span><span
class="no">ENGLISH</span><span class="p">);</span>
-<span class="p">}</span>
+ <span class="c1">// 1. Retrieve info from URI</span>
+ <span class="c1">// 1.1. retrieve the info about the requested entity
set</span>
+ <span class="n">List</span><span class="o"><</span><span
class="n">UriResource</span><span class="o">></span> <span
class="n">resourceParts</span> <span class="o">=</span> <span
class="n">uriInfo</span><span class="o">.</span><span
class="na">getUriResourceParts</span><span class="o">();</span>
+ <span class="c1">// Note: only in our example we can rely that the first
segment is the EntitySet</span>
+ <span class="n">UriResourceEntitySet</span> <span
class="n">uriEntityset</span> <span class="o">=</span> <span
class="o">(</span><span class="n">UriResourceEntitySet</span><span
class="o">)</span> <span class="n">resourceParts</span><span
class="o">.</span><span class="na">get</span><span class="o">(</span><span
class="mi">0</span><span class="o">);</span>
+ <span class="n">EdmEntitySet</span> <span class="n">edmEntitySet</span>
<span class="o">=</span> <span class="n">uriEntityset</span><span
class="o">.</span><span class="na">getEntitySet</span><span class="o">();</span>
+ <span class="c1">// the key for the entity</span>
+ <span class="n">List</span><span class="o"><</span><span
class="n">UriParameter</span><span class="o">></span> <span
class="n">keyPredicates</span> <span class="o">=</span> <span
class="n">uriEntityset</span><span class="o">.</span><span
class="na">getKeyPredicates</span><span class="o">();</span>
+
+ <span class="c1">// 1.2. retrieve the requested (Edm) property</span>
+ <span class="c1">// the last segment is the Property</span>
+ <span class="n">UriResourceProperty</span> <span
class="n">uriProperty</span> <span class="o">=</span> <span
class="o">(</span><span class="n">UriResourceProperty</span><span
class="o">)</span> <span class="n">resourceParts</span><span
class="o">.</span><span class="na">get</span><span class="o">(</span><span
class="n">resourceParts</span><span class="o">.</span><span
class="na">size</span><span class="o">()</span> <span class="o">-</span><span
class="mi">1</span><span class="o">);</span>
+ <span class="n">EdmProperty</span> <span class="n">edmProperty</span>
<span class="o">=</span> <span class="n">uriProperty</span><span
class="o">.</span><span class="na">getProperty</span><span class="o">();</span>
+ <span class="n">String</span> <span class="n">edmPropertyName</span> <span
class="o">=</span> <span class="n">edmProperty</span><span
class="o">.</span><span class="na">getName</span><span class="o">();</span>
+ <span class="c1">// in our example, we know we have only primitive types
in our model</span>
+ <span class="n">EdmPrimitiveType</span> <span
class="n">edmPropertyType</span> <span class="o">=</span> <span
class="o">(</span><span class="n">EdmPrimitiveType</span><span
class="o">)</span> <span class="n">edmProperty</span><span
class="o">.</span><span class="na">getType</span><span class="o">();</span>
-<span class="c1">// 3. serialize</span>
-<span class="n">Object</span> <span class="n">value</span> <span
class="o">=</span> <span class="k">property</span><span class="p">.</span><span
class="n">getValue</span><span class="p">();</span>
-<span class="k">if</span> <span class="p">(</span><span class="n">value</span>
<span class="o">!=</span> <span class="k">null</span><span class="p">)</span>
<span class="p">{</span>
- <span class="c1">// 3.1. configure the serializer</span>
- <span class="n">ODataFormat</span> <span class="n">format</span> <span
class="o">=</span> <span class="n">ODataFormat</span><span
class="p">.</span><span class="n">fromContentType</span><span
class="p">(</span><span class="n">responseFormat</span><span class="p">);</span>
- <span class="n">ODataSerializer</span> <span class="n">serializer</span>
<span class="o">=</span> <span class="n">odata</span><span
class="p">.</span><span class="n">createSerializer</span><span
class="p">(</span><span class="n">format</span><span class="p">);</span>
-
- <span class="n">ContextURL</span> <span class="n">contextUrl</span> <span
class="o">=</span> <span class="n">ContextURL</span><span
class="p">.</span><span class="k">with</span><span class="p">().</span><span
class="n">entitySet</span><span class="p">(</span><span
class="n">edmEntitySet</span><span class="p">).</span><span
class="n">navOrPropertyPath</span><span class="p">(</span><span
class="n">edmPropertyName</span><span class="p">).</span><span
class="n">build</span><span class="p">();</span>
- <span class="n">PrimitiveSerializerOptions</span> <span
class="n">options</span> <span class="o">=</span> <span
class="n">PrimitiveSerializerOptions</span><span class="p">.</span><span
class="k">with</span><span class="p">().</span><span
class="n">contextURL</span><span class="p">(</span><span
class="n">contextUrl</span><span class="p">).</span><span
class="n">build</span><span class="p">();</span>
- <span class="c1">// 3.2. serialize</span>
- <span class="n">SerializerResult</span> <span
class="n">serializerResult</span> <span class="o">=</span> <span
class="n">serializer</span><span class="p">.</span><span
class="k">primitive</span><span class="p">(</span><span
class="n">edmPropertyType</span><span class="p">,</span> <span
class="k">property</span><span class="p">,</span> <span
class="n">options</span><span class="p">);</span>
- <span class="n">InputStream</span> <span class="n">propertyStream</span>
<span class="o">=</span> <span class="n">serializerResult</span><span
class="p">.</span><span class="n">getContent</span><span class="p">();</span>
+ <span class="c1">// 2. retrieve data from backend</span>
+ <span class="c1">// 2.1. retrieve the entity data, for which the property
has to be read</span>
+ <span class="n">Entity</span> <span class="n">entity</span> <span
class="o">=</span> <span class="n">storage</span><span class="o">.</span><span
class="na">readEntityData</span><span class="o">(</span><span
class="n">edmEntitySet</span><span class="o">,</span> <span
class="n">keyPredicates</span><span class="o">);</span>
+ <span class="k">if</span> <span class="o">(</span><span
class="n">entity</span> <span class="o">==</span> <span
class="kc">null</span><span class="o">)</span> <span class="o">{</span> <span
class="c1">// Bad request</span>
+ <span class="k">throw</span> <span class="k">new</span> <span
class="nf">ODataApplicationException</span><span class="o">(</span><span
class="s">"Entity not found"</span><span class="o">,</span>
+ <span class="n">HttpStatusCode</span><span
class="o">.</span><span class="na">NOT_FOUND</span><span
class="o">.</span><span class="na">getStatusCode</span><span
class="o">(),</span> <span class="n">Locale</span><span class="o">.</span><span
class="na">ENGLISH</span><span class="o">);</span>
+ <span class="o">}</span>
- <span class="c1">//4. configure the response object</span>
- <span class="n">response</span><span class="p">.</span><span
class="n">setContent</span><span class="p">(</span><span
class="n">propertyStream</span><span class="p">);</span>
- <span class="n">response</span><span class="p">.</span><span
class="n">setStatusCode</span><span class="p">(</span><span
class="n">HttpStatusCode</span><span class="p">.</span><span
class="no">OK</span><span class="p">.</span><span
class="n">getStatusCode</span><span class="p">());</span>
- <span class="n">response</span><span class="p">.</span><span
class="n">setHeader</span><span class="p">(</span><span
class="n">HttpHeader</span><span class="p">.</span><span
class="no">CONTENT_TYPE</span><span class="p">,</span> <span
class="n">responseFormat</span><span class="p">.</span><span
class="n">toContentTypeString</span><span class="p">());</span>
-<span class="p">}</span><span class="k">else</span><span class="p">{</span>
- <span class="c1">// in case there's no value for the property, we can
skip the serialization</span>
- <span class="n">response</span><span class="p">.</span><span
class="n">setStatusCode</span><span class="p">(</span><span
class="n">HttpStatusCode</span><span class="p">.</span><span
class="no">NO_CONTENT</span><span class="p">.</span><span
class="n">getStatusCode</span><span class="p">());</span>
-<span class="p">}</span>
+ <span class="c1">// 2.2. retrieve the property data from the entity</span>
+ <span class="n">Property</span> <span class="n">property</span> <span
class="o">=</span> <span class="n">entity</span><span class="o">.</span><span
class="na">getProperty</span><span class="o">(</span><span
class="n">edmPropertyName</span><span class="o">);</span>
+ <span class="k">if</span> <span class="o">(</span><span
class="n">property</span> <span class="o">==</span> <span
class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+ <span class="k">throw</span> <span class="k">new</span> <span
class="nf">ODataApplicationException</span><span class="o">(</span><span
class="s">"Property not found"</span><span class="o">,</span>
+ <span class="n">HttpStatusCode</span><span
class="o">.</span><span class="na">NOT_FOUND</span><span
class="o">.</span><span class="na">getStatusCode</span><span
class="o">(),</span> <span class="n">Locale</span><span class="o">.</span><span
class="na">ENGLISH</span><span class="o">);</span>
+ <span class="o">}</span>
+
+ <span class="c1">// 3. serialize</span>
+ <span class="n">Object</span> <span class="n">value</span> <span
class="o">=</span> <span class="n">property</span><span class="o">.</span><span
class="na">getValue</span><span class="o">();</span>
+ <span class="k">if</span> <span class="o">(</span><span
class="n">value</span> <span class="o">!=</span> <span
class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+ <span class="c1">// 3.1. configure the serializer</span>
+ <span class="n">ODataFormat</span> <span class="n">format</span> <span
class="o">=</span> <span class="n">ODataFormat</span><span
class="o">.</span><span class="na">fromContentType</span><span
class="o">(</span><span class="n">responseFormat</span><span class="o">);</span>
+ <span class="n">ODataSerializer</span> <span
class="n">serializer</span> <span class="o">=</span> <span
class="n">odata</span><span class="o">.</span><span
class="na">createSerializer</span><span class="o">(</span><span
class="n">format</span><span class="o">);</span>
+
+ <span class="n">ContextURL</span> <span class="n">contextUrl</span>
<span class="o">=</span> <span class="n">ContextURL</span><span
class="o">.</span><span class="na">with</span><span class="o">().</span><span
class="na">entitySet</span><span class="o">(</span><span
class="n">edmEntitySet</span><span class="o">).</span><span
class="na">navOrPropertyPath</span><span class="o">(</span><span
class="n">edmPropertyName</span><span class="o">).</span><span
class="na">build</span><span class="o">();</span>
+ <span class="n">PrimitiveSerializerOptions</span> <span
class="n">options</span> <span class="o">=</span> <span
class="n">PrimitiveSerializerOptions</span><span class="o">.</span><span
class="na">with</span><span class="o">().</span><span
class="na">contextURL</span><span class="o">(</span><span
class="n">contextUrl</span><span class="o">).</span><span
class="na">build</span><span class="o">();</span>
+ <span class="c1">// 3.2. serialize</span>
+ <span class="n">SerializerResult</span> <span
class="n">serializerResult</span> <span class="o">=</span> <span
class="n">serializer</span><span class="o">.</span><span
class="na">primitive</span><span class="o">(</span><span
class="n">edmPropertyType</span><span class="o">,</span> <span
class="n">property</span><span class="o">,</span> <span
class="n">options</span><span class="o">);</span>
+ <span class="n">InputStream</span> <span
class="n">propertyStream</span> <span class="o">=</span> <span
class="n">serializerResult</span><span class="o">.</span><span
class="na">getContent</span><span class="o">();</span>
+
+ <span class="c1">//4. configure the response object</span>
+ <span class="n">response</span><span class="o">.</span><span
class="na">setContent</span><span class="o">(</span><span
class="n">propertyStream</span><span class="o">);</span>
+ <span class="n">response</span><span class="o">.</span><span
class="na">setStatusCode</span><span class="o">(</span><span
class="n">HttpStatusCode</span><span class="o">.</span><span
class="na">OK</span><span class="o">.</span><span
class="na">getStatusCode</span><span class="o">());</span>
+ <span class="n">response</span><span class="o">.</span><span
class="na">setHeader</span><span class="o">(</span><span
class="n">HttpHeader</span><span class="o">.</span><span
class="na">CONTENT_TYPE</span><span class="o">,</span> <span
class="n">responseFormat</span><span class="o">.</span><span
class="na">toContentTypeString</span><span class="o">());</span>
+ <span class="o">}</span><span class="k">else</span><span class="o">{</span>
+ <span class="c1">// in case there's no value for the property, we
can skip the serialization</span>
+ <span class="n">response</span><span class="o">.</span><span
class="na">setStatusCode</span><span class="o">(</span><span
class="n">HttpStatusCode</span><span class="o">.</span><span
class="na">NO_CONTENT</span><span class="o">.</span><span
class="na">getStatusCode</span><span class="o">());</span>
+ <span class="o">}</span>
+<span class="o">}</span>
</pre></div>
-<p>}</p>
</li>
</ol>
<h2 id="42-adapt-the-demoservlet-class">4.2. Adapt the DemoServlet class</h2>
@@ -789,8 +793,8 @@ It has been based on a simple OData mode
<hr />
<h1 id="6-links">6. Links</h1>
<p>Tutorial OData V4 service part 1: <a
href="/doc/odata4/tutorials/read/tutorial_read.html">Read Entity Collection</a>
| <a
href="/doc/odata4/tutorials/read/sample/DemoService_Tutorial_Read.zip">sample
project zip</a><br />
-Tutorial OData V4 service part 2: <a
href="/doc/odata4/tutorials/readep/tutorial_readep.html">Read Entity, Read
Property (this page)</a> | <a
href="/doc/odata4/tutorials/readep/sample/DemoService_Tutorial_Readep.zip">sample
project zip</a>
-Tutorial OData V4 service part 3: <a
href="/doc/odata4/tutorials/write/tutorial_write.html">Write (Create, Update,
Delete Entity)</a> | <a
href="/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip">sample
project zip</a></p>
+Tutorial OData V4 service part 2: <a
href="/doc/odata4/tutorials/readep/tutorial_readep.html">Read Entity, Read
Property (this page)</a> | <a
href="/doc/odata4/tutorials/readep/sample/DemoService_Tutorial_Readep.zip">sample
project zip</a><br />
+Tutorial OData V4 service part 3: <a
href="/doc/odata4/tutorials/write/tutorial_write.html">Write (Create, Update,
Delete Entity)</a> | <a
href="/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip">sample
project zip</a> </p>
<p>OData specification: <a href="http://odata.org/">http://odata.org/</a>
Olingo Javadoc: <a
href="http://olingo.apache.org/javadoc/odata4/index.html">http://olingo.apache.org/javadoc/odata4/index.html</a></p><div
align="center">
<p>Copyright © 2013-2015, The Apache Software Foundation<br>