Author: buildbot
Date: Tue Apr 28 11:41:54 2015
New Revision: 949479
Log:
Staging update by buildbot for olingo
Modified:
websites/staging/olingo/trunk/content/ (props changed)
websites/staging/olingo/trunk/content/doc/odata4/tutorials/read/tutorial_read.html
Propchange: websites/staging/olingo/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Tue Apr 28 11:41:54 2015
@@ -1 +1 @@
-1676495
+1676498
Modified:
websites/staging/olingo/trunk/content/doc/odata4/tutorials/read/tutorial_read.html
==============================================================================
---
websites/staging/olingo/trunk/content/doc/odata4/tutorials/read/tutorial_read.html
(original)
+++
websites/staging/olingo/trunk/content/doc/odata4/tutorials/read/tutorial_read.html
Tue Apr 28 11:41:54 2015
@@ -341,18 +341,22 @@ Select the mentioned methods and press O
<p><img alt="overrideMethods" src="overrideMethods.png" title="The dialog for
overriding superclass methods in Eclipse" /></p>
<p>Letâs have a closer look at the methods in detail.</p>
<p>First, we need to declare some constants, to be used in below code</p>
-<p>```java
-// Service Namespace
-public static final String NAMESPACE = "com.example.model";</p>
-<p>// EDM Container
-public static final String CONTAINER_NAME = "Container";
-public static final FullQualifiedName CONTAINER = new
FullQualifiedName(NAMESPACE, CONTAINER_NAME);</p>
-<p>// Entity Types Names
-public static final String ET_PRODUCT_NAME = "Product";
-public static final FullQualifiedName ET_PRODUCT_FQN = new
FullQualifiedName(NAMESPACE, ET_PRODUCT_NAME);</p>
-<p>// Entity Set Names
-public static final String ES_PRODUCTS_NAME = "Products";
-```</p>
+<div class="codehilite"><pre><span class="c1">// Service Namespace</span>
+<span class="n">public</span> <span class="k">static</span> <span
class="k">final</span> <span class="n">String</span> <span
class="no">NAMESPACE</span> <span class="o">=</span> <span
class="s">"com.example.model"</span><span class="p">;</span>
+
+<span class="c1">// EDM Container</span>
+<span class="n">public</span> <span class="k">static</span> <span
class="k">final</span> <span class="n">String</span> <span
class="no">CONTAINER_NAME</span> <span class="o">=</span> <span
class="s">"Container"</span><span class="p">;</span>
+<span class="n">public</span> <span class="k">static</span> <span
class="k">final</span> <span class="n">FullQualifiedName</span> <span
class="no">CONTAINER</span> <span class="o">=</span> <span class="k">new</span>
<span class="n">FullQualifiedName</span><span class="p">(</span><span
class="no">NAMESPACE</span><span class="p">,</span> <span
class="no">CONTAINER_NAME</span><span class="p">);</span>
+
+<span class="c1">// Entity Types Names</span>
+<span class="n">public</span> <span class="k">static</span> <span
class="k">final</span> <span class="n">String</span> <span
class="no">ET_PRODUCT_NAME</span> <span class="o">=</span> <span
class="s">"Product"</span><span class="p">;</span>
+<span class="n">public</span> <span class="k">static</span> <span
class="k">final</span> <span class="n">FullQualifiedName</span> <span
class="no">ET_PRODUCT_FQN</span> <span class="o">=</span> <span
class="k">new</span> <span class="n">FullQualifiedName</span><span
class="p">(</span><span class="no">NAMESPACE</span><span class="p">,</span>
<span class="no">ET_PRODUCT_NAME</span><span class="p">);</span>
+
+<span class="c1">// Entity Set Names</span>
+<span class="n">public</span> <span class="k">static</span> <span
class="k">final</span> <span class="n">String</span> <span
class="no">ES_PRODUCTS_NAME</span> <span class="o">=</span> <span
class="s">"Products"</span><span class="p">;</span>
+</pre></div>
+
+
<p><strong><em>getEntityType()</em></strong></p>
<p>In our example service, we want to provide a list of products to users who
call the OData service.
The user of our service, for example an app-developer, will ask himself: how
does such a "product" entry look like? How is it structured? Which information
about a product is provided? For example, the name of it? And which data types
can be expected from these properties?<br />
@@ -361,84 +365,83 @@ Such information is provided by the <em>
<p>The name of the EntityType: âProductâ<br />
The properties: name and type and additional info, e.g. âIDâ of type
âedm.int32â<br />
Which of the properties is the âkeyâ property: a reference to the âIDâ
property. </p>
-<p>```java
-@Override
-public EntityType getEntityType(FullQualifiedName entityTypeName) throws
ODataException {</p>
-<div class="codehilite"><pre><span class="c1">// this method is called for one
of the EntityTypes that are configured in the Schema</span>
-<span class="k">if</span><span class="p">(</span><span
class="n">entityTypeName</span><span class="p">.</span><span
class="n">equals</span><span class="p">(</span><span
class="no">ET_PRODUCT_FQN</span><span class="p">)){</span>
+<div class="codehilite"><pre><span class="p">@</span><span
class="n">Override</span>
+<span class="n">public</span> <span class="n">EntityType</span> <span
class="n">getEntityType</span><span class="p">(</span><span
class="n">FullQualifiedName</span> <span class="n">entityTypeName</span><span
class="p">)</span> <span class="n">throws</span> <span
class="n">ODataException</span> <span class="p">{</span>
- <span class="c1">//create EntityType properties</span>
- <span class="n">Property</span> <span class="n">id</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">Property</span><span class="p">().</span><span
class="n">setName</span><span class="p">(</span><span
class="s">"ID"</span><span class="p">).</span><span
class="n">setType</span><span class="p">(</span><span
class="n">EdmPrimitiveTypeKind</span><span class="p">.</span><span
class="n">Int32</span><span class="p">.</span><span
class="n">getFullQualifiedName</span><span class="p">());</span>
- <span class="n">Property</span> <span class="n">name</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">Property</span><span class="p">().</span><span
class="n">setName</span><span class="p">(</span><span
class="s">"Name"</span><span class="p">).</span><span
class="n">setType</span><span class="p">(</span><span
class="n">EdmPrimitiveTypeKind</span><span class="p">.</span><span
class="n">String</span><span class="p">.</span><span
class="n">getFullQualifiedName</span><span class="p">());</span>
- <span class="n">Property</span> <span class="n">description</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">Property</span><span class="p">().</span><span
class="n">setName</span><span class="p">(</span><span
class="s">"Description"</span><span class="p">).</span><span
class="n">setType</span><span class="p">(</span><span
class="n">EdmPrimitiveTypeKind</span><span class="p">.</span><span
class="n">String</span><span class="p">.</span><span
class="n">getFullQualifiedName</span><span class="p">());</span>
+ <span class="o">//</span> <span class="n">this</span> <span
class="n">method</span> <span class="n">is</span> <span class="n">called</span>
<span class="k">for</span> <span class="n">one</span> <span class="n">of</span>
<span class="n">the</span> <span class="n">EntityTypes</span> <span
class="n">that</span> <span class="n">are</span> <span
class="n">configured</span> <span class="n">in</span> <span
class="n">the</span> <span class="n">Schema</span>
+ <span class="k">if</span><span class="p">(</span><span
class="n">entityTypeName</span><span class="p">.</span><span
class="n">equals</span><span class="p">(</span><span
class="n">ET_PRODUCT_FQN</span><span class="p">)){</span>
- <span class="c1">// create PropertyRef for Key element</span>
- <span class="n">PropertyRef</span> <span class="n">propertyRef</span>
<span class="o">=</span> <span class="k">new</span> <span
class="n">PropertyRef</span><span class="p">();</span>
- <span class="n">propertyRef</span><span class="p">.</span><span
class="n">setPropertyName</span><span class="p">(</span><span
class="s">"ID"</span><span class="p">);</span>
+ <span class="o">//</span><span class="n">create</span> <span
class="n">EntityType</span> <span class="k">properties</span>
+ <span class="n">Property</span> <span class="n">id</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">Property</span><span class="p">().</span><span
class="n">setName</span><span class="p">(</span>"<span
class="n">ID</span>"<span class="p">).</span><span
class="n">setType</span><span class="p">(</span><span
class="n">EdmPrimitiveTypeKind</span><span class="p">.</span><span
class="n">Int32</span><span class="p">.</span><span
class="n">getFullQualifiedName</span><span class="p">());</span>
+ <span class="n">Property</span> <span class="n">name</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">Property</span><span class="p">().</span><span
class="n">setName</span><span class="p">(</span>"<span
class="n">Name</span>"<span class="p">).</span><span
class="n">setType</span><span class="p">(</span><span
class="n">EdmPrimitiveTypeKind</span><span class="p">.</span><span
class="n">String</span><span class="p">.</span><span
class="n">getFullQualifiedName</span><span class="p">());</span>
+ <span class="n">Property</span> <span class="n">description</span>
<span class="p">=</span> <span class="n">new</span> <span
class="n">Property</span><span class="p">().</span><span
class="n">setName</span><span class="p">(</span>"<span
class="n">Description</span>"<span class="p">).</span><span
class="n">setType</span><span class="p">(</span><span
class="n">EdmPrimitiveTypeKind</span><span class="p">.</span><span
class="n">String</span><span class="p">.</span><span
class="n">getFullQualifiedName</span><span class="p">());</span>
+
+ <span class="o">//</span> <span class="n">create</span> <span
class="n">PropertyRef</span> <span class="k">for</span> <span
class="n">Key</span> <span class="n">element</span>
+ <span class="n">PropertyRef</span> <span class="n">propertyRef</span>
<span class="p">=</span> <span class="n">new</span> <span
class="n">PropertyRef</span><span class="p">();</span>
+ <span class="n">propertyRef</span><span class="p">.</span><span
class="n">setPropertyName</span><span class="p">(</span>"<span
class="n">ID</span>"<span class="p">);</span>
+
+ <span class="o">//</span> <span class="n">configure</span> <span
class="n">EntityType</span>
+ <span class="n">EntityType</span> <span class="n">entityType</span>
<span class="p">=</span> <span class="n">new</span> <span
class="n">EntityType</span><span class="p">();</span>
+ <span class="n">entityType</span><span class="p">.</span><span
class="n">setName</span><span class="p">(</span><span
class="n">ET_PRODUCT_NAME</span><span class="p">);</span>
+ <span class="n">entityType</span><span class="p">.</span><span
class="n">setProperties</span><span class="p">(</span><span
class="n">Arrays</span><span class="p">.</span><span
class="n">asList</span><span class="p">(</span><span class="n">id</span><span
class="p">,</span> <span class="n">name</span> <span class="p">,</span> <span
class="n">description</span><span class="p">));</span>
+ <span class="n">entityType</span><span class="p">.</span><span
class="n">setKey</span><span class="p">(</span><span
class="n">Arrays</span><span class="p">.</span><span
class="n">asList</span><span class="p">(</span><span
class="n">propertyRef</span><span class="p">));</span>
- <span class="c1">// configure EntityType</span>
- <span class="n">EntityType</span> <span class="n">entityType</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">EntityType</span><span class="p">();</span>
- <span class="n">entityType</span><span class="p">.</span><span
class="n">setName</span><span class="p">(</span><span
class="no">ET_PRODUCT_NAME</span><span class="p">);</span>
- <span class="n">entityType</span><span class="p">.</span><span
class="n">setProperties</span><span class="p">(</span><span
class="n">Arrays</span><span class="p">.</span><span
class="n">asList</span><span class="p">(</span><span class="n">id</span><span
class="p">,</span> <span class="n">name</span> <span class="p">,</span> <span
class="n">description</span><span class="p">));</span>
- <span class="n">entityType</span><span class="p">.</span><span
class="n">setKey</span><span class="p">(</span><span
class="n">Arrays</span><span class="p">.</span><span
class="n">asList</span><span class="p">(</span><span
class="n">propertyRef</span><span class="p">));</span>
+ <span class="k">return</span> <span class="n">entityType</span><span
class="p">;</span>
+ <span class="p">}</span>
- <span class="k">return</span> <span class="n">entityType</span><span
class="p">;</span>
+ <span class="k">return</span> <span class="n">null</span><span
class="p">;</span>
<span class="p">}</span>
-
-<span class="k">return</span> <span class="k">null</span><span
class="p">;</span>
</pre></div>
-<p>}
-```</p>
<p><strong><em>getEntitySet()</em></strong></p>
<p>The procedure for declaring the <em>EntitySets</em> is similar.
An <em>EntitySet</em> is a crucial resource, when an OData service is used to
request data.
-In our example, weâll invoke the following URL, which we expect to provide
us a list of products:
-<code>html
-http://localhost:8080/DemoService/DemoServlet.svc/Products</code>
-When declaring an <em>EntitySet</em>, we need to define the type of entries
which are contained in the list. Such type is an <em>EntityType</em>.
+In our example, weâll invoke the following URL, which we expect to provide
us a list of products:</p>
+<div class="codehilite"><pre><span class="n">http</span><span
class="p">:</span><span class="o">//</span><span
class="n">localhost</span><span class="p">:</span>8080<span
class="o">/</span><span class="n">DemoService</span><span
class="o">/</span><span class="n">DemoServlet</span><span
class="p">.</span><span class="n">svc</span><span class="o">/</span><span
class="n">Products</span>
+</pre></div>
+
+
+<p>When declaring an <em>EntitySet</em>, we need to define the type of entries
which are contained in the list. Such type is an <em>EntityType</em>.
In our example, we set our previously created <em>EntityType</em>, which is
referred by a <em>FullQualifiedName</em>.</p>
-<p>```java
-@Override
-public EntitySet getEntitySet(FullQualifiedName entityContainer, String
entitySetName) throws ODataException {</p>
-<div class="codehilite"><pre><span class="k">if</span><span
class="p">(</span><span class="n">entityContainer</span><span
class="p">.</span><span class="n">equals</span><span class="p">(</span><span
class="n">CONTAINER</span><span class="p">)){</span>
- <span class="k">if</span><span class="p">(</span><span
class="n">entitySetName</span><span class="p">.</span><span
class="n">equals</span><span class="p">(</span><span
class="n">ES_PRODUCTS_NAME</span><span class="p">)){</span>
- <span class="n">EntitySet</span> <span class="n">entitySet</span>
<span class="p">=</span> <span class="n">new</span> <span
class="n">EntitySet</span><span class="p">();</span>
- <span class="n">entitySet</span><span class="p">.</span><span
class="n">setName</span><span class="p">(</span><span
class="n">ES_PRODUCTS_NAME</span><span class="p">);</span>
- <span class="n">entitySet</span><span class="p">.</span><span
class="n">setType</span><span class="p">(</span><span
class="n">ET_PRODUCT_FQN</span><span class="p">);</span>
+<div class="codehilite"><pre><span class="p">@</span><span
class="n">Override</span>
+<span class="n">public</span> <span class="n">EntitySet</span> <span
class="n">getEntitySet</span><span class="p">(</span><span
class="n">FullQualifiedName</span> <span class="n">entityContainer</span><span
class="p">,</span> <span class="n">String</span> <span
class="n">entitySetName</span><span class="p">)</span> <span
class="n">throws</span> <span class="n">ODataException</span> <span
class="p">{</span>
- <span class="k">return</span> <span class="n">entitySet</span><span
class="p">;</span>
+ <span class="k">if</span><span class="p">(</span><span
class="n">entityContainer</span><span class="p">.</span><span
class="n">equals</span><span class="p">(</span><span
class="n">CONTAINER</span><span class="p">)){</span>
+ <span class="k">if</span><span class="p">(</span><span
class="n">entitySetName</span><span class="p">.</span><span
class="n">equals</span><span class="p">(</span><span
class="n">ES_PRODUCTS_NAME</span><span class="p">)){</span>
+ <span class="n">EntitySet</span> <span class="n">entitySet</span>
<span class="p">=</span> <span class="n">new</span> <span
class="n">EntitySet</span><span class="p">();</span>
+ <span class="n">entitySet</span><span class="p">.</span><span
class="n">setName</span><span class="p">(</span><span
class="n">ES_PRODUCTS_NAME</span><span class="p">);</span>
+ <span class="n">entitySet</span><span class="p">.</span><span
class="n">setType</span><span class="p">(</span><span
class="n">ET_PRODUCT_FQN</span><span class="p">);</span>
+
+ <span class="k">return</span> <span
class="n">entitySet</span><span class="p">;</span>
+ <span class="p">}</span>
<span class="p">}</span>
-<span class="p">}</span>
-<span class="k">return</span> <span class="n">null</span><span
class="p">;</span>
+ <span class="k">return</span> <span class="n">null</span><span
class="p">;</span>
+<span class="p">}</span>
</pre></div>
-<p>}
-```</p>
<p><strong><em>getEntityContainer()</em></strong></p>
<p>In order to provide data, our OData service needs an
<em>EntityContainer</em> that carries the <em>EntitySets</em>.
In our example, we have only one <em>EntitySet</em>, so we create one
<em>EntityContainer</em> and set our <em>EntitySet</em>.</p>
-<p>```java
-@Override
-public EntityContainer getEntityContainer() throws ODataException {</p>
-<div class="codehilite"><pre><span class="c1">// create EntitySets</span>
-<span class="n">List</span><span class="o"><</span><span
class="n">EntitySet</span><span class="o">></span> <span
class="n">entitySets</span> <span class="o">=</span> <span class="k">new</span>
<span class="n">ArrayList</span><span class="o"><</span><span
class="n">EntitySet</span><span class="o">></span><span class="p">();</span>
-<span class="n">entitySets</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span
class="n">getEntitySet</span><span class="p">(</span><span
class="no">CONTAINER</span><span class="p">,</span> <span
class="no">ES_PRODUCTS_NAME</span><span class="p">));</span>
+<div class="codehilite"><pre><span class="p">@</span><span
class="n">Override</span>
+<span class="n">public</span> <span class="n">EntityContainer</span> <span
class="n">getEntityContainer</span><span class="p">()</span> <span
class="n">throws</span> <span class="n">ODataException</span> <span
class="p">{</span>
-<span class="c1">// create EntityContainer</span>
-<span class="n">EntityContainer</span> <span class="n">entityContainer</span>
<span class="o">=</span> <span class="k">new</span> <span
class="n">EntityContainer</span><span class="p">();</span>
-<span class="n">entityContainer</span><span class="p">.</span><span
class="n">setName</span><span class="p">(</span><span
class="no">CONTAINER_NAME</span><span class="p">);</span>
-<span class="n">entityContainer</span><span class="p">.</span><span
class="n">setEntitySets</span><span class="p">(</span><span
class="n">entitySets</span><span class="p">);</span>
+ <span class="o">//</span> <span class="n">create</span> <span
class="n">EntitySets</span>
+ <span class="n">List</span><span class="o"><</span><span
class="n">EntitySet</span><span class="o">></span> <span
class="n">entitySets</span> <span class="p">=</span> <span class="n">new</span>
<span class="n">ArrayList</span><span class="o"><</span><span
class="n">EntitySet</span><span class="o">></span><span class="p">();</span>
+ <span class="n">entitySets</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span
class="n">getEntitySet</span><span class="p">(</span><span
class="n">CONTAINER</span><span class="p">,</span> <span
class="n">ES_PRODUCTS_NAME</span><span class="p">));</span>
+
+ <span class="o">//</span> <span class="n">create</span> <span
class="n">EntityContainer</span>
+ <span class="n">EntityContainer</span> <span
class="n">entityContainer</span> <span class="p">=</span> <span
class="n">new</span> <span class="n">EntityContainer</span><span
class="p">();</span>
+ <span class="n">entityContainer</span><span class="p">.</span><span
class="n">setName</span><span class="p">(</span><span
class="n">CONTAINER_NAME</span><span class="p">);</span>
+ <span class="n">entityContainer</span><span class="p">.</span><span
class="n">setEntitySets</span><span class="p">(</span><span
class="n">entitySets</span><span class="p">);</span>
-<span class="k">return</span> <span class="n">entityContainer</span><span
class="p">;</span>
+ <span class="k">return</span> <span class="n">entityContainer</span><span
class="p">;</span>
+<span class="p">}</span>
</pre></div>
-<p>}
-```</p>
<p><strong><em>getSchemas()</em></strong></p>
<p>Up to this point, we have declared the type of our data
(<em>EntityType</em>) and our list (<em>EntitySet</em>), and weâve put it
into a container (<em>EntityContainer</em>).<br />
Now weâre required to put all these elements into a <em>Schema</em>.<br />
@@ -446,83 +449,92 @@ While the model of an OData service can
So, in our example, we create a list of schemas, where we add one new
<em>Schema</em> object.<br />
The schema is configured with a <em>Namespace</em>, which serves to uniquely
identify all elements.<br />
Then our elements are added to the Schema.</p>
-<p>```java
-@Override
-public List<Schema> getSchemas() throws ODataException {</p>
-<div class="codehilite"><pre><span class="c1">// create Schema</span>
-<span class="n">Schema</span> <span class="n">schema</span> <span
class="o">=</span> <span class="k">new</span> <span
class="n">Schema</span><span class="p">();</span>
-<span class="n">schema</span><span class="p">.</span><span
class="n">setNamespace</span><span class="p">(</span><span
class="no">NAMESPACE</span><span class="p">);</span>
-
-<span class="c1">// add EntityTypes</span>
-<span class="n">List</span><span class="o"><</span><span
class="n">EntityType</span><span class="o">></span> <span
class="n">entityTypes</span> <span class="o">=</span> <span
class="k">new</span> <span class="n">ArrayList</span><span
class="o"><</span><span class="n">EntityType</span><span
class="o">></span><span class="p">();</span>
-<span class="n">entityTypes</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span
class="n">getEntityType</span><span class="p">(</span><span
class="no">ET_PRODUCT_FQN</span><span class="p">));</span>
-<span class="n">schema</span><span class="p">.</span><span
class="n">setEntityTypes</span><span class="p">(</span><span
class="n">entityTypes</span><span class="p">);</span>
+<div class="codehilite"><pre><span class="p">@</span><span
class="n">Override</span>
+<span class="n">public</span> <span class="n">List</span><span
class="o"><</span><span class="n">Schema</span><span class="o">></span>
<span class="n">getSchemas</span><span class="p">()</span> <span
class="n">throws</span> <span class="n">ODataException</span> <span
class="p">{</span>
-<span class="c1">// add EntityContainer</span>
-<span class="n">schema</span><span class="p">.</span><span
class="n">setEntityContainer</span><span class="p">(</span><span
class="n">getEntityContainer</span><span class="p">());</span>
+ <span class="o">//</span> <span class="n">create</span> <span
class="n">Schema</span>
+ <span class="n">Schema</span> <span class="n">schema</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">Schema</span><span class="p">();</span>
+ <span class="n">schema</span><span class="p">.</span><span
class="n">setNamespace</span><span class="p">(</span><span
class="n">NAMESPACE</span><span class="p">);</span>
+
+ <span class="o">//</span> <span class="n">add</span> <span
class="n">EntityTypes</span>
+ <span class="n">List</span><span class="o"><</span><span
class="n">EntityType</span><span class="o">></span> <span
class="n">entityTypes</span> <span class="p">=</span> <span
class="n">new</span> <span class="n">ArrayList</span><span
class="o"><</span><span class="n">EntityType</span><span
class="o">></span><span class="p">();</span>
+ <span class="n">entityTypes</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span
class="n">getEntityType</span><span class="p">(</span><span
class="n">ET_PRODUCT_FQN</span><span class="p">));</span>
+ <span class="n">schema</span><span class="p">.</span><span
class="n">setEntityTypes</span><span class="p">(</span><span
class="n">entityTypes</span><span class="p">);</span>
+
+ <span class="o">//</span> <span class="n">add</span> <span
class="n">EntityContainer</span>
+ <span class="n">schema</span><span class="p">.</span><span
class="n">setEntityContainer</span><span class="p">(</span><span
class="n">getEntityContainer</span><span class="p">());</span>
+
+ <span class="o">//</span> <span class="n">finally</span>
+ <span class="n">List</span><span class="o"><</span><span
class="n">Schema</span><span class="o">></span> <span
class="n">schemas</span> <span class="p">=</span> <span class="n">new</span>
<span class="n">ArrayList</span><span class="o"><</span><span
class="n">Schema</span><span class="o">></span><span class="p">();</span>
+ <span class="n">schemas</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span class="n">schema</span><span
class="p">);</span>
-<span class="c1">// finally</span>
-<span class="n">List</span><span class="o"><</span><span
class="n">Schema</span><span class="o">></span> <span
class="n">schemas</span> <span class="o">=</span> <span class="k">new</span>
<span class="n">ArrayList</span><span class="o"><</span><span
class="n">Schema</span><span class="o">></span><span class="p">();</span>
-<span class="n">schemas</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span class="n">schema</span><span
class="p">);</span>
-
-<span class="k">return</span> <span class="n">schemas</span><span
class="p">;</span>
+ <span class="k">return</span> <span class="n">schemas</span><span
class="p">;</span>
+<span class="p">}</span>
</pre></div>
-<p>}
-```</p>
<p><strong><em>getEntityContainerInfo()</em></strong></p>
-<p>```java
-@Override
-public EntityContainerInfo getEntityContainerInfo(FullQualifiedName
entityContainerName) throws ODataException {</p>
-<p>// This method is invoked when displaying the service document at e.g.
http://localhost:8080/DemoService/DemoService.svc
- if(entityContainerName == null || entityContainerName.equals(CONTAINER)){
- EntityContainerInfo entityContainerInfo = new EntityContainerInfo();
- entityContainerInfo.setContainerName(CONTAINER);
- return entityContainerInfo;
- }</p>
-<div class="codehilite"><pre><span class="k">return</span> <span
class="n">null</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="p">@</span><span
class="n">Override</span>
+<span class="n">public</span> <span class="n">EntityContainerInfo</span> <span
class="n">getEntityContainerInfo</span><span class="p">(</span><span
class="n">FullQualifiedName</span> <span
class="n">entityContainerName</span><span class="p">)</span> <span
class="n">throws</span> <span class="n">ODataException</span> <span
class="p">{</span>
+
+<span class="o">//</span> <span class="n">This</span> <span
class="n">method</span> <span class="n">is</span> <span
class="n">invoked</span> <span class="n">when</span> <span
class="n">displaying</span> <span class="n">the</span> <span
class="n">service</span> <span class="n">document</span> <span
class="n">at</span> <span class="n">e</span><span class="p">.</span><span
class="n">g</span><span class="p">.</span> <span class="n">http</span><span
class="p">:</span><span class="o">//</span><span
class="n">localhost</span><span class="p">:</span>8080<span
class="o">/</span><span class="n">DemoService</span><span
class="o">/</span><span class="n">DemoService</span><span
class="p">.</span><span class="n">svc</span>
+ <span class="k">if</span><span class="p">(</span><span
class="n">entityContainerName</span> <span class="o">==</span> <span
class="n">null</span> <span class="o">||</span> <span
class="n">entityContainerName</span><span class="p">.</span><span
class="n">equals</span><span class="p">(</span><span
class="n">CONTAINER</span><span class="p">)){</span>
+ <span class="n">EntityContainerInfo</span> <span
class="n">entityContainerInfo</span> <span class="p">=</span> <span
class="n">new</span> <span class="n">EntityContainerInfo</span><span
class="p">();</span>
+ <span class="n">entityContainerInfo</span><span
class="p">.</span><span class="n">setContainerName</span><span
class="p">(</span><span class="n">CONTAINER</span><span class="p">);</span>
+ <span class="k">return</span> <span
class="n">entityContainerInfo</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="n">null</span><span
class="p">;</span>
+<span class="p">}</span>
</pre></div>
-<p>}
-```</p>
<p><strong>Summary:</strong><br />
We have created a class that declares the metadata of our OData service.
We have declared the main elements of an OData service: <em>EntityType</em>,
<em>EntitySet</em>, <em>EntityContainer</em> and <em>Schema</em>.</p>
<p>At runtime of an OData service, such metadata can be viewed by invoking the
Metadata Document.</p>
-<p>In our example:
-<code>http://localhost:8080/DemoService/DemoService.svc/$metadata</code></p>
-<p><code>xml
-<?xml version='1.0' encoding='UTF-8'?>
-<edmx:Edmx Version="4.0"
xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
- <edmx:DataServices>
- <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm"
Namespace="com.example.model">
- <EntityType Name="Product">
- <Key>
- <PropertyRef Name="ID"/>
- </Key>
- <Property Name="ID" Type="Edm.Int32"/>
- <Property Name="Name" Type="Edm.String"/>
- <Property Name="Description" Type="Edm.String"/>
- </EntityType>
- <EntityContainer Name="Container">
- <EntitySet Name="Products"
EntityType="com.example.model.Product"/>
- </EntityContainer>
- </Schema>
- </edmx:DataServices>
-</edmx:Edmx></code></p>
-<p>The Service Document can be invoked to view the Entity Sets, like in our
example at
-<code>http://localhost:8080/DemoService/DemoService.svc/</code></p>
-<p><code>json
-{
- "@odata.context" :
"http://localhost:8080/DemoService/DemoService.svc/$metadata",
- "value" : [
- {
- "name" : "Products",
- "url" : "Products"
- } ]
-}</code></p>
+<p>In our example:</p>
+<div
class="codehilite"><pre>http://localhost:8080/DemoService/DemoService.svc/<span
class="p">$</span><span class="nv">metadata</span>
+
+
+
+<span class="cp"><?xml version='1.0'
encoding='UTF-8'?></span>
+<span class="nt"><edmx:Edmx</span> <span class="na">Version=</span><span
class="s">"4.0"</span> <span class="na">xmlns:edmx=</span><span
class="s">"http://docs.oasis-open.org/odata/ns/edmx"</span><span
class="nt">></span>
+ <span class="nt"><edmx:DataServices></span>
+ <span class="nt"><Schema</span> <span class="na">xmlns=</span><span
class="s">"http://docs.oasis-open.org/odata/ns/edm"</span> <span
class="na">Namespace=</span><span
class="s">"com.example.model"</span><span class="nt">></span>
+ <span class="nt"><EntityType</span> <span
class="na">Name=</span><span class="s">"Product"</span><span
class="nt">></span>
+ <span class="nt"><Key></span>
+ <span class="nt"><PropertyRef</span> <span
class="na">Name=</span><span class="s">"ID"</span><span
class="nt">/></span>
+ <span class="nt"></Key></span>
+ <span class="nt"><Property</span> <span
class="na">Name=</span><span class="s">"ID"</span> <span
class="na">Type=</span><span class="s">"Edm.Int32"</span><span
class="nt">/></span>
+ <span class="nt"><Property</span> <span
class="na">Name=</span><span class="s">"Name"</span> <span
class="na">Type=</span><span class="s">"Edm.String"</span><span
class="nt">/></span>
+ <span class="nt"><Property</span> <span
class="na">Name=</span><span class="s">"Description"</span> <span
class="na">Type=</span><span class="s">"Edm.String"</span><span
class="nt">/></span>
+ <span class="nt"></EntityType></span>
+ <span class="nt"><EntityContainer</span> <span
class="na">Name=</span><span class="s">"Container"</span><span
class="nt">></span>
+ <span class="nt"><EntitySet</span> <span
class="na">Name=</span><span class="s">"Products"</span> <span
class="na">EntityType=</span><span
class="s">"com.example.model.Product"</span><span
class="nt">/></span>
+ <span class="nt"></EntityContainer></span>
+ <span class="nt"></Schema></span>
+ <span class="nt"></edmx:DataServices></span>
+<span class="nt"></edmx:Edmx></span>
+</pre></div>
+
+
+<p>The Service Document can be invoked to view the Entity Sets, like in our
example at</p>
+<div class="codehilite"><pre><span class="n">http</span><span
class="p">:</span><span class="o">//</span><span
class="n">localhost</span><span class="p">:</span>8080<span
class="o">/</span><span class="n">DemoService</span><span
class="o">/</span><span class="n">DemoService</span><span
class="p">.</span><span class="n">svc</span><span class="o">/</span>
+
+
+
+<span class="p">{</span>
+ "<span class="p">@</span><span class="n">odata</span><span
class="p">.</span><span class="n">context</span>" <span class="p">:</span>
"<span class="n">http</span><span class="p">:</span><span
class="o">//</span><span class="n">localhost</span><span
class="p">:</span>8080<span class="o">/</span><span
class="n">DemoService</span><span class="o">/</span><span
class="n">DemoService</span><span class="p">.</span><span
class="n">svc</span><span class="o">/</span>$<span
class="n">metadata</span>"<span class="p">,</span>
+ "<span class="n">value</span>" <span class="p">:</span> <span
class="p">[</span>
+ <span class="p">{</span>
+ "<span class="n">name</span>" <span class="p">:</span>
"<span class="n">Products</span>"<span class="p">,</span>
+ "<span class="n">url</span>" <span class="p">:</span>
"<span class="n">Products</span>"
+ <span class="p">}</span> <span class="p">]</span>
+<span class="p">}</span>
+</pre></div>
+
+
<blockquote>
<p>Note:<br />
After implementing the <em>EdmProvider</em>, we can, as an intermediate step,
build/deploy the service and invoke the 2 static pages: service document and
metadata document.<br />
@@ -561,23 +573,30 @@ For example, the property names have to
<p>Within our package <em>myservice.mynamespace.service</em>, we create a Java
class <em>DemoEntityCollectionProcessor</em> that implements the interface
<em>org.apache.olingo.server.api.processor.EntityCollectionProcessor</em>.</p>
<p><img alt="createJavaClass" src="createJavaClass.png" title="The Eclipse
dialog for creating a Java class" /></p>
<h3 id="423-implement-the-required-methods">4.2.3. Implement the required
methods</h3>
-<p>After creation of the Java class, we can see that there are 2 methods to be
implemented:
-<em> <em>init()</em><br />
- This method is invoked by the <em>Olingo</em> Framework, allowing us to
store the context object</em> <em>readEntityCollection()</em><br />
- Here we have to fetch the required data and pass it back to the
<em>Olingo</em> FWK</p>
+<p>After creation of the Java class, we can see that there are 2 methods to be
implemented:</p>
+<ul>
+<li><em>init()</em><br />
+ This method is invoked by the <em>Olingo</em> Framework, allowing us to
store the context object</li>
+<li><em>readEntityCollection()</em><br />
+ Here we have to fetch the required data and pass it back to the
<em>Olingo</em> FWK</li>
+</ul>
<p>Letâs have a closer look</p>
<p><strong><em>init()</em></strong></p>
<p>This method is common to all processor interfaces.<br />
The <em>Olingo</em> framework initializes the processor with an instance of
the <em>OData</em> object.
According to the Javadoc, this object is the âRoot object for serving
factory tasksâ¦â
Weâll need it later, so we store it as member variable.</p>
-<p><code>java
- public void init(OData odata, ServiceMetadata serviceMetadata) {
- this.odata = odata;
- }</code></p>
+<div class="codehilite"><pre><span class="n">public</span> <span
class="n">void</span> <span class="n">init</span><span class="p">(</span><span
class="n">OData</span> <span class="n">odata</span><span class="p">,</span>
<span class="n">ServiceMetadata</span> <span
class="n">serviceMetadata</span><span class="p">)</span> <span
class="p">{</span>
+ <span class="n">this</span><span class="p">.</span><span
class="n">odata</span> <span class="p">=</span> <span
class="n">odata</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+
<p>Donât forget to declare the member variable</p>
-<p><code>java
- private OData odata;</code></p>
+<div class="codehilite"><pre><span class="n">private</span> <span
class="n">OData</span> <span class="n">odata</span><span class="p">;</span>
+</pre></div>
+
+
<p><strong><em>readEntityCollection()</em></strong></p>
<p>The <em>EntityCollectionProcessor</em> exposes only one method:<br />
<em>readEntityCollection()</em><br />
@@ -614,33 +633,26 @@ If the user doesnât specify any con
Because the <em>readEntityCollection</em> method is supposed to deliver the
data in the format that is requested by the user. Weâll use this parameter
when creating a serializer based on it.</p>
<p>The steps for implementating the method <em>readEntityCollection</em>
are:</p>
<ol>
-<li>
-<p>Which data is requested?<br />
-Usually, an OData service provides different <em>EntitySets</em>, so first it
is required to identify which <em>EntitySet</em> has been requested. This
information can be retrieved from the <em>uriInfo</em> object</p>
-</li>
-<li>
-<p>Fetch the data<br />
-As a developer of the OData service, you have to know how and where the data
is stored. In many cases, this would be a database. At this point, you would
connect to your database and fetch the requested data with an appropriate SQL
statement. The data that is fetched from the data storage has to be put into an
<em>EntitySet</em> object.
-Note that this object has to be of type <em>EntitySet</em>, not
<em>EdmEntitySet</em><br />
-The package <em>org.apache.olingo.commons.api.data</em> provides interfaces
that describe the actual data, not the metadata.</p>
-</li>
+<li>Which data is requested?<br />
+ Usually, an OData service provides different <em>EntitySets</em>, so first
it is required to identify which <em>EntitySet</em> has been requested. This
information can be retrieved from the <em>uriInfo</em> object</li>
+<li>Fetch the data
+ As a developer of the OData service, you have to know how and where the data
is stored. In many cases, this would be a database. At this point, you would
connect to your database and fetch the requested data with an appropriate SQL
statement. The data that is fetched from the data storage has to be put into an
<em>EntitySet</em> object.
+ Note that this object has to be of type <em>EntitySet</em>, not
<em>EdmEntitySet</em><br />
+ The package <em>org.apache.olingo.commons.api.data</em> provides interfaces
that describe the actual data, not the metadata.</li>
</ol>
<p><img alt="datapackage" src="datapackage.png" title="The package containing
the interfaces for handling runtime data" /></p>
<ol>
<li>
<p>Transform the data<br />
<em>Olingo</em> expects from us to provide the data as low-level
<em>InputStream</em> object. However, <em>Olingo</em> supports us in doing so,
by providing us with a proper "serializer".
-So what we have to do is create the serializer based on the requested content
type, configure it and call it.</p>
+ So what we have to do is create the serializer based on the requested
content type, configure it and call it.</p>
</li>
<li>
<p>Configure the response<br />
-The response object has been passed to us in the method signature. We use it
to set the serialized data (the <em>InputStream</em> object).<br />
-Furthermore, we have to set the HTTP status code, which means that we have the
opportunity to do proper error handling.<br />
-And finally we have to set the content type.</p>
-</li>
-</ol>
-<p>```java
-public void readEntityCollection(ODataRequest request, ODataResponse response,
UriInfo uriInfo, ContentType responseFormat)
+ The response object has been passed to us in the method signature. We use it
to set the serialized data (the <em>InputStream</em> object).<br />
+ Furthermore, we have to set the HTTP status code, which means that we have
the opportunity to do proper error handling.<br />
+ And finally we have to set the content type.</p>
+<p>public void readEntityCollection(ODataRequest request, ODataResponse
response, UriInfo uriInfo, ContentType responseFormat)
throws ODataApplicationException, SerializerException
{</p>
<div class="codehilite"><pre><span class="c1">// 1st retrieve the requested
EntitySet from the uriInfo (representation of the parsed URI)</span>
<span class="n">List</span><span class="o"><</span><span
class="n">UriResource</span><span class="o">></span> <span
class="n">resourcePaths</span> <span class="o">=</span> <span
class="n">uriInfo</span><span class="p">.</span><span
class="n">getUriResourceParts</span><span class="p">();</span>
@@ -670,39 +682,39 @@ public void readEntityCollection(ODataRe
</pre></div>
-<p>}
-```</p>
+<p>}</p>
+</li>
+</ol>
<p><strong><em>getData()</em></strong></p>
<p>Up to now, we havenât elaborated on fetching the actual data.
In our tutorial, to keep the code as simple as possible, we use a little
helper method that delivers some hardcoded entries.<br />
Since weâre supposed to deliver the data inside an <em>EntitySet</em>
instance, we create the instance, ask it for the (initially empty) list of
entities and add some new entities to it.<br />
We create the entities and their properties according to what we declared in
our <em>ExampleEdmProvider</em> class. So we have to take care to provide the
correct names to the new property objects.</p>
-<p>```java
-private EntitySet getData(EdmEntitySet edmEntitySet){</p>
-<div class="codehilite"><pre><span class="n">EntitySet</span> <span
class="n">entitySet</span> <span class="p">=</span> <span class="n">new</span>
<span class="n">EntitySetImpl</span><span class="p">();</span>
-<span class="n">List</span><span class="o"><</span><span
class="n">Entity</span><span class="o">></span> <span
class="n">entityList</span> <span class="p">=</span> <span
class="n">entitySet</span><span class="p">.</span><span
class="n">getEntities</span><span class="p">();</span>
-
-<span class="o">//</span> <span class="n">add</span> <span
class="n">some</span> <span class="n">sample</span> <span
class="n">product</span> <span class="n">entities</span>
-<span class="n">entityList</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span class="n">new</span> <span
class="n">EntityImpl</span><span class="p">()</span>
- <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">ID</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> 1<span class="p">))</span>
- <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Name</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "<span
class="n">Notebook</span> <span class="n">Basic</span> 15"<span
class="p">))</span>
- <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Description</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "<span
class="n">Notebook</span> <span class="n">Basic</span><span class="p">,</span>
1<span class="p">.</span>7<span class="n">GHz</span> <span class="o">-</span>
15 <span class="n">XGA</span> <span class="o">-</span> 1024<span
class="n">MB</span> <span class="n">DDR2</span> <span class="n">SDRAM</span>
<span class="o">-</span> 40<span class="n">GB</span>"<span
class="p">)));</span>
-<span class="n">entityList</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span class="n">new</span> <span
class="n">EntityImpl</span><span class="p">()</span>
- <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">ID</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> 2<span class="p">))</span>
- <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Name</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "1<span
class="n">UMTS</span> <span class="n">PDA</span>"<span class="p">))</span>
- <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Description</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "<span
class="n">Ultrafast</span> 3<span class="n">G</span> <span
class="n">UMTS</span><span class="o">/</span><span class="n">HSDPA</span> <span
class="n">Pocket</span> <span class="n">PC</span><span class="p">,</span> <span
class="n">supports</span> <span class="n">GSM</span> <span
class="n">network</span>"<span class="p">)));</span>
-
-<span class="n">entityList</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span class="n">new</span> <span
class="n">EntityImpl</span><span class="p">()</span>
- <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">ID</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> 3<span class="p">))</span>
- <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Name</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "<span
class="n">Ergo</span> <span class="n">Screen</span>"<span
class="p">))</span>
- <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Description</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "17 <span
class="n">Optimum</span> <span class="n">Resolution</span> 1024 <span
class="n">x</span> 768 <span class="p">@</span> 85<span
class="n">Hz</span><span class="p">,</span> <span class="n">resolution</span>
1280 <span class="n">x</span> 960"<span class="p">)));</span>
+<div class="codehilite"><pre><span class="n">private</span> <span
class="n">EntitySet</span> <span class="n">getData</span><span
class="p">(</span><span class="n">EdmEntitySet</span> <span
class="n">edmEntitySet</span><span class="p">){</span>
+
+ <span class="n">EntitySet</span> <span class="n">entitySet</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">EntitySetImpl</span><span class="p">();</span>
+ <span class="n">List</span><span class="o"><</span><span
class="n">Entity</span><span class="o">></span> <span
class="n">entityList</span> <span class="p">=</span> <span
class="n">entitySet</span><span class="p">.</span><span
class="n">getEntities</span><span class="p">();</span>
+
+ <span class="o">//</span> <span class="n">add</span> <span
class="n">some</span> <span class="n">sample</span> <span
class="n">product</span> <span class="n">entities</span>
+ <span class="n">entityList</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span class="n">new</span> <span
class="n">EntityImpl</span><span class="p">()</span>
+ <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">ID</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> 1<span class="p">))</span>
+ <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Name</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "<span
class="n">Notebook</span> <span class="n">Basic</span> 15"<span
class="p">))</span>
+ <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Description</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "<span
class="n">Notebook</span> <span class="n">Basic</span><span class="p">,</span>
1<span class="p">.</span>7<span class="n">GHz</span> <span class="o">-</span>
15 <span class="n">XGA</span> <span class="o">-</span> 1024<span
class="n">MB</span> <span class="n">DDR2</span> <span class="n">SDRAM</span>
<span class="o">-</span> 40<span class="n">GB</span>"<span
class="p">)));</span>
+ <span class="n">entityList</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span class="n">new</span> <span
class="n">EntityImpl</span><span class="p">()</span>
+ <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">ID</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> 2<span class="p">))</span>
+ <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Name</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "1<span
class="n">UMTS</span> <span class="n">PDA</span>"<span class="p">))</span>
+ <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Description</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "<span
class="n">Ultrafast</span> 3<span class="n">G</span> <span
class="n">UMTS</span><span class="o">/</span><span class="n">HSDPA</span> <span
class="n">Pocket</span> <span class="n">PC</span><span class="p">,</span> <span
class="n">supports</span> <span class="n">GSM</span> <span
class="n">network</span>"<span class="p">)));</span>
+
+ <span class="n">entityList</span><span class="p">.</span><span
class="n">add</span><span class="p">(</span><span class="n">new</span> <span
class="n">EntityImpl</span><span class="p">()</span>
+ <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">ID</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> 3<span class="p">))</span>
+ <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Name</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "<span
class="n">Ergo</span> <span class="n">Screen</span>"<span
class="p">))</span>
+ <span class="p">.</span><span class="n">addProperty</span><span
class="p">(</span><span class="n">new</span> <span
class="n">PropertyImpl</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">Description</span>"<span class="p">,</span> <span
class="n">ValueType</span><span class="p">.</span><span
class="n">PRIMITIVE</span><span class="p">,</span> "17 <span
class="n">Optimum</span> <span class="n">Resolution</span> 1024 <span
class="n">x</span> 768 <span class="p">@</span> 85<span
class="n">Hz</span><span class="p">,</span> <span class="n">resolution</span>
1280 <span class="n">x</span> 960"<span class="p">)));</span>
-<span class="k">return</span> <span class="n">entitySet</span><span
class="p">;</span>
+ <span class="k">return</span> <span class="n">entitySet</span><span
class="p">;</span>
+<span class="p">}</span>
</pre></div>
-<p>}
-```</p>
<h2 id="43-web-application">4.3. Web Application</h2>
<p>After declaring the metadata and providing the data, our OData service
implementation is done.<br />
The last step is to enable our OData service to be called on a web server.<br
/>
@@ -720,58 +732,60 @@ It receives the user request and if the
This means that the handler has to be configured with all processor
implementations that have been created along with the OData service (in our
example, only one processor).
Furthermore, the <em>ODataHttpHandler</em> needs to carry the knowledge about
the <em>EdmProvider</em>.</p>
<p>As such, hereâs the location where our 2 implemented classes come
together, the metadata declaration and the data provisioning.</p>
-<p>```java
-// This class represents a standard HttpServlet implementation.
-// It is used as main entry point for the web application that carries the
OData service.
-// The implementation of this HttpServlet simply delegates the user requests
to the ODataHttpHandler
-public class DemoServlet extends HttpServlet {</p>
-<div class="codehilite"><pre><span class="n">private</span> <span
class="n">static</span> <span class="n">final</span> <span
class="n">long</span> <span class="n">serialVersionUID</span> <span
class="p">=</span> 1<span class="n">L</span><span class="p">;</span>
-<span class="n">private</span> <span class="n">static</span> <span
class="n">final</span> <span class="n">Logger</span> <span class="n">LOG</span>
<span class="p">=</span> <span class="n">LoggerFactory</span><span
class="p">.</span><span class="n">getLogger</span><span class="p">(</span><span
class="n">DemoServlet</span><span class="p">.</span><span
class="n">class</span><span class="p">);</span>
-
-<span class="p">@</span><span class="n">Override</span>
-<span class="n">protected</span> <span class="n">void</span> <span
class="n">service</span><span class="p">(</span><span class="n">final</span>
<span class="n">HttpServletRequest</span> <span class="n">req</span><span
class="p">,</span> <span class="n">final</span> <span
class="n">HttpServletResponse</span> <span class="n">resp</span><span
class="p">)</span> <span class="n">throws</span> <span
class="n">ServletException</span><span class="p">,</span> <span
class="n">IOException</span> <span class="p">{</span>
-
- <span class="k">try</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">create</span> <span
class="n">odata</span> <span class="n">handler</span> <span
class="n">and</span> <span class="n">configure</span> <span class="n">it</span>
<span class="n">with</span> <span class="n">EdmProvider</span> <span
class="n">and</span> <span class="n">Processor</span>
- <span class="n">OData</span> <span class="n">odata</span> <span
class="p">=</span> <span class="n">OData</span><span class="p">.</span><span
class="n">newInstance</span><span class="p">();</span>
- <span class="n">ServiceMetadata</span> <span class="n">edm</span>
<span class="p">=</span> <span class="n">odata</span><span
class="p">.</span><span class="n">createServiceMetadata</span><span
class="p">(</span><span class="n">new</span> <span
class="n">ExampleEdmProvider</span><span class="p">(),</span> <span
class="n">new</span> <span class="n">ArrayList</span><span
class="o"><</span><span class="n">EdmxReference</span><span
class="o">></span><span class="p">());</span>
- <span class="n">ODataHttpHandler</span> <span class="n">handler</span>
<span class="p">=</span> <span class="n">odata</span><span
class="p">.</span><span class="n">createHandler</span><span
class="p">(</span><span class="n">edm</span><span class="p">);</span>
- <span class="n">handler</span><span class="p">.</span><span
class="n">register</span><span class="p">(</span><span class="n">new</span>
<span class="n">DemoEntityCollectionProcessor</span><span class="p">());</span>
-
- <span class="o">//</span> <span class="n">let</span> <span
class="n">the</span> <span class="n">handler</span> <span class="n">do</span>
<span class="n">the</span> <span class="n">work</span>
- <span class="n">handler</span><span class="p">.</span><span
class="n">process</span><span class="p">(</span><span class="n">req</span><span
class="p">,</span> <span class="n">resp</span><span class="p">);</span>
-
- <span class="p">}</span> <span class="k">catch</span> <span
class="p">(</span><span class="n">RuntimeException</span> <span
class="n">e</span><span class="p">)</span> <span class="p">{</span>
- <span class="n">LOG</span><span class="p">.</span><span
class="n">error</span><span class="p">(</span>"<span
class="n">Server</span> <span class="n">Error</span> <span
class="n">ocurred</span> <span class="n">in</span> <span
class="n">DemoServlet</span>"<span class="p">,</span> <span
class="n">e</span><span class="p">);</span>
- <span class="n">throw</span> <span class="n">new</span> <span
class="n">ServletException</span><span class="p">(</span><span
class="n">e</span><span class="p">);</span>
+<div class="codehilite"><pre><span class="c1">// This class represents a
standard HttpServlet implementation.</span>
+<span class="c1">// It is used as main entry point for the web application
that carries the OData service.</span>
+<span class="c1">// The implementation of this HttpServlet simply delegates
the user requests to the ODataHttpHandler</span>
+<span class="n">public</span> <span class="k">class</span> <span
class="n">DemoServlet</span> <span class="k">extends</span> <span
class="n">HttpServlet</span> <span class="p">{</span>
+
+ <span class="n">private</span> <span class="k">static</span> <span
class="k">final</span> <span class="n">long</span> <span
class="n">serialVersionUID</span> <span class="o">=</span> <span
class="mh">1</span><span class="no">L</span><span class="p">;</span>
+ <span class="n">private</span> <span class="k">static</span> <span
class="k">final</span> <span class="n">Logger</span> <span
class="no">LOG</span> <span class="o">=</span> <span
class="n">LoggerFactory</span><span class="p">.</span><span
class="n">getLogger</span><span class="p">(</span><span
class="n">DemoServlet</span><span class="p">.</span><span
class="k">class</span><span class="p">);</span>
+
+ <span class="p">@</span><span class="n">Override</span>
+ <span class="k">protected</span> <span class="k">void</span> <span
class="n">service</span><span class="p">(</span><span class="k">final</span>
<span class="n">HttpServletRequest</span> <span class="n">req</span><span
class="p">,</span> <span class="k">final</span> <span
class="n">HttpServletResponse</span> <span class="n">resp</span><span
class="p">)</span> <span class="n">throws</span> <span
class="n">ServletException</span><span class="p">,</span> <span
class="n">IOException</span> <span class="p">{</span>
+
+ <span class="n">try</span> <span class="p">{</span>
+ <span class="c1">// create odata handler and configure it with
EdmProvider and Processor</span>
+ <span class="n">OData</span> <span class="n">odata</span> <span
class="o">=</span> <span class="n">OData</span><span class="p">.</span><span
class="n">newInstance</span><span class="p">();</span>
+ <span class="n">ServiceMetadata</span> <span class="n">edm</span>
<span class="o">=</span> <span class="n">odata</span><span
class="p">.</span><span class="n">createServiceMetadata</span><span
class="p">(</span><span class="k">new</span> <span
class="n">ExampleEdmProvider</span><span class="p">(),</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="p">());</span>
+ <span class="n">ODataHttpHandler</span> <span
class="n">handler</span> <span class="o">=</span> <span
class="n">odata</span><span class="p">.</span><span
class="n">createHandler</span><span class="p">(</span><span
class="n">edm</span><span class="p">);</span>
+ <span class="n">handler</span><span class="p">.</span><span
class="n">register</span><span class="p">(</span><span class="k">new</span>
<span class="n">DemoEntityCollectionProcessor</span><span class="p">());</span>
+
+ <span class="c1">// let the handler do the work</span>
+ <span class="n">handler</span><span class="p">.</span><span
class="n">process</span><span class="p">(</span><span class="n">req</span><span
class="p">,</span> <span class="n">resp</span><span class="p">);</span>
+
+ <span class="p">}</span> <span class="n">catch</span> <span
class="p">(</span><span class="n">RuntimeException</span> <span
class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="no">LOG</span><span class="p">.</span><span
class="n">error</span><span class="p">(</span><span class="s">"Server
Error ocurred in DemoServlet"</span><span class="p">,</span> <span
class="n">e</span><span class="p">);</span>
+ <span class="n">throw</span> <span class="k">new</span> <span
class="n">ServletException</span><span class="p">(</span><span
class="n">e</span><span class="p">);</span>
+ <span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
-<p>}</p>
-<p>```</p>
<h3 id="432-edit-the-webxml">4.3.2. Edit the web.xml</h3>
<p>The very last step of our tutorial is to register the Servlet in the
<em>web.xml</em> file.<br />
Furthermore, we need to specify the <em>url-pattern</em> for the servlet, such
that our OData service can be invoked.</p>
<p>Open the <em>src/main/webapp/WEB-INF/web.xml</em> file and paste the
following content into it:</p>
-<p>```xml
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- id="WebApp_ID" version="2.5"></p>
-<p><servlet>
- <servlet-name>DemoServlet</servlet-name>
- <servlet-class> myservice.mynamespace.web.DemoServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
-</servlet></p>
-<p><servlet-mapping>
- <servlet-name>DemoServlet</servlet-name>
- <url-pattern>/DemoService.svc/*</url-pattern>
-</servlet-mapping>
-</web-app></p>
-<p>```</p>
+<div class="codehilite"><pre><span class="nt"><web-app</span> <span
class="na">xmlns:xsi=</span><span
class="s">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="na">xmlns=</span><span
class="s">"http://java.sun.com/xml/ns/javaee"</span>
+ <span class="na">xmlns:web=</span><span
class="s">"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span>
+ <span class="na">xsi:schemaLocation=</span><span
class="s">"http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span>
+ <span class="na">id=</span><span class="s">"WebApp_ID"</span>
<span class="na">version=</span><span class="s">"2.5"</span><span
class="nt">></span>
+
+<span class="nt"><servlet></span>
+ <span class="nt"><servlet-name></span>DemoServlet<span
class="nt"></servlet-name></span>
+ <span class="nt"><servlet-class></span>
myservice.mynamespace.web.DemoServlet<span
class="nt"></servlet-class></span>
+ <span class="nt"><load-on-startup></span>1<span
class="nt"></load-on-startup></span>
+<span class="nt"></servlet></span>
+
+<span class="nt"><servlet-mapping></span>
+ <span class="nt"><servlet-name></span>DemoServlet<span
class="nt"></servlet-name></span>
+ <span class="nt"><url-pattern></span>/DemoService.svc/*<span
class="nt"></url-pattern></span>
+<span class="nt"></servlet-mapping></span>
+<span class="nt"></web-app></span>
+</pre></div>
+
+
<p>Thatâs it. Now we can build and run the web application.</p>
<hr />
<h1 id="5-run-the-service">5. Run the service</h1>
@@ -797,62 +811,77 @@ If you face problems related to the serv
<h3 id="the-service-urls">The service-URLs</h3>
<p>Try the following URLs:</p>
<p><strong>Service Document</strong></p>
-<p><code>http://localhost:8080/DemoService/DemoService.svc/</code>
-The expected result is the service document which displays our
<em>EntityContainerInfo</em>:</p>
-<p><code>json
-{
- "@odata.context" :
"http://localhost:8080/DemoService/DemoService.svc/$metadata",
- "value" : [
- {
- "name" : "Products",
- "url" : "Products"
- } ]
-}</code></p>
+<div class="codehilite"><pre><span class="n">http</span><span
class="p">:</span><span class="o">//</span><span
class="n">localhost</span><span class="p">:</span>8080<span
class="o">/</span><span class="n">DemoService</span><span
class="o">/</span><span class="n">DemoService</span><span
class="p">.</span><span class="n">svc</span><span class="o">/</span>
+</pre></div>
+
+
+<p>The expected result is the service document which displays our
<em>EntityContainerInfo</em>:</p>
+<div class="codehilite"><pre><span class="p">{</span>
+ "<span class="p">@</span><span class="n">odata</span><span
class="p">.</span><span class="n">context</span>" <span class="p">:</span>
"<span class="n">http</span><span class="p">:</span><span
class="o">//</span><span class="n">localhost</span><span
class="p">:</span>8080<span class="o">/</span><span
class="n">DemoService</span><span class="o">/</span><span
class="n">DemoService</span><span class="p">.</span><span
class="n">svc</span><span class="o">/</span>$<span
class="n">metadata</span>"<span class="p">,</span>
+ "<span class="n">value</span>" <span class="p">:</span> <span
class="p">[</span>
+ <span class="p">{</span>
+ "<span class="n">name</span>" <span class="p">:</span>
"<span class="n">Products</span>"<span class="p">,</span>
+ "<span class="n">url</span>" <span class="p">:</span>
"<span class="n">Products</span>"
+ <span class="p">}</span> <span class="p">]</span>
+<span class="p">}</span>
+</pre></div>
+
+
<p><strong>Metadata Document</strong></p>
-<p><code>http://localhost:8080/ExampleService1/ExampleService1.svc/$metadata</code>
-The expected result is the metadata document that displays our
<em>Schema</em>, <em>EntityType</em>, <em>EntityContainer</em> and
<em>EntitySet</em>.</p>
-<p><code>xml
-<?xml version='1.0' encoding='UTF-8'?>
-<edmx:Edmx Version="4.0"
xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
- <edmx:DataServices>
- <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm"
Namespace="com.example.model">
- <EntityType Name="Product">
- <Key>
- <PropertyRef Name="ID"/>
- </Key>
- <Property Name="ID" Type="Edm.Int32"/>
- <Property Name="Name" Type="Edm.String"/>
- <Property Name="Description" Type="Edm.String"/>
- </EntityType>
- <EntityContainer Name="Container">
- <EntitySet Name="Products"
EntityType="com.example.model.Product"/>
- </EntityContainer>
- </Schema>
- </edmx:DataServices>
-</edmx:Edmx></code></p>
+<div class="codehilite"><pre><span class="n">http</span><span
class="p">:</span><span class="o">//</span><span
class="n">localhost</span><span class="p">:</span>8080<span
class="o">/</span><span class="n">ExampleService1</span><span
class="o">/</span><span class="n">ExampleService1</span><span
class="p">.</span><span class="n">svc</span><span class="o">/</span>$<span
class="n">metadata</span>
+</pre></div>
+
+
+<p>The expected result is the metadata document that displays our
<em>Schema</em>, <em>EntityType</em>, <em>EntityContainer</em> and
<em>EntitySet</em>.</p>
+<div class="codehilite"><pre><span class="cp"><?xml version='1.0'
encoding='UTF-8'?></span>
+<span class="nt"><edmx:Edmx</span> <span class="na">Version=</span><span
class="s">"4.0"</span> <span class="na">xmlns:edmx=</span><span
class="s">"http://docs.oasis-open.org/odata/ns/edmx"</span><span
class="nt">></span>
+ <span class="nt"><edmx:DataServices></span>
+ <span class="nt"><Schema</span> <span class="na">xmlns=</span><span
class="s">"http://docs.oasis-open.org/odata/ns/edm"</span> <span
class="na">Namespace=</span><span
class="s">"com.example.model"</span><span class="nt">></span>
+ <span class="nt"><EntityType</span> <span
class="na">Name=</span><span class="s">"Product"</span><span
class="nt">></span>
+ <span class="nt"><Key></span>
+ <span class="nt"><PropertyRef</span> <span
class="na">Name=</span><span class="s">"ID"</span><span
class="nt">/></span>
+ <span class="nt"></Key></span>
+ <span class="nt"><Property</span> <span
class="na">Name=</span><span class="s">"ID"</span> <span
class="na">Type=</span><span class="s">"Edm.Int32"</span><span
class="nt">/></span>
+ <span class="nt"><Property</span> <span
class="na">Name=</span><span class="s">"Name"</span> <span
class="na">Type=</span><span class="s">"Edm.String"</span><span
class="nt">/></span>
+ <span class="nt"><Property</span> <span
class="na">Name=</span><span class="s">"Description"</span> <span
class="na">Type=</span><span class="s">"Edm.String"</span><span
class="nt">/></span>
+ <span class="nt"></EntityType></span>
+ <span class="nt"><EntityContainer</span> <span
class="na">Name=</span><span class="s">"Container"</span><span
class="nt">></span>
+ <span class="nt"><EntitySet</span> <span
class="na">Name=</span><span class="s">"Products"</span> <span
class="na">EntityType=</span><span
class="s">"com.example.model.Product"</span><span
class="nt">/></span>
+ <span class="nt"></EntityContainer></span>
+ <span class="nt"></Schema></span>
+ <span class="nt"></edmx:DataServices></span>
+<span class="nt"></edmx:Edmx></span>
+</pre></div>
+
+
<p><strong>Query / EntitySet</strong></p>
-<p><code>http://localhost:8080/DemoService/DemoService.svc/Products</code>
-The expected result is the hardcoded list of product entries, which we have
coded in our processor implementation:</p>
-<p><code>json
-{
- "@odata.context":"$metadata#Products","
- value":[
- {
- "ID":1,
- "Name":"Notebook Basic 15",
- "Description":"Notebook Basic, 1.7GHz - 15 XGA - 1024MB DDR2 SDRAM -
40GB"
- },
- {
- "ID":2,
- "Name":"1UMTS PDA",
- "Description":"Ultrafast 3G UMTS/HSDPA Pocket PC, supports GSM network"
- },
- {
- "ID":3,
- "Name":"Ergo Screen",
- "Description":"17 Optimum Resolution 1024 x 768 @ 85Hz, resolution 1280
x 960"
- }]
-}</code></p>
+<div class="codehilite"><pre><span class="n">http</span><span
class="p">:</span><span class="o">//</span><span
class="n">localhost</span><span class="p">:</span>8080<span
class="o">/</span><span class="n">DemoService</span><span
class="o">/</span><span class="n">DemoService</span><span
class="p">.</span><span class="n">svc</span><span class="o">/</span><span
class="n">Products</span>
+</pre></div>
+
+
+<p>The expected result is the hardcoded list of product entries, which we have
coded in our processor implementation:</p>
+<div class="codehilite"><pre><span class="p">{</span>
+ "<span class="p">@</span><span class="n">odata</span><span
class="p">.</span><span class="n">context</span>"<span
class="p">:</span>"$<span class="n">metadata</span>#<span
class="n">Products</span>"<span class="p">,</span>"
+ <span class="n">value</span>"<span class="p">:[</span>
+ <span class="p">{</span>
+ "<span class="n">ID</span>"<span class="p">:</span>1<span
class="p">,</span>
+ "<span class="n">Name</span>"<span
class="p">:</span>"<span class="n">Notebook</span> <span
class="n">Basic</span> 15"<span class="p">,</span>
+ "<span class="n">Description</span>"<span
class="p">:</span>"<span class="n">Notebook</span> <span
class="n">Basic</span><span class="p">,</span> 1<span class="p">.</span>7<span
class="n">GHz</span> <span class="o">-</span> 15 <span class="n">XGA</span>
<span class="o">-</span> 1024<span class="n">MB</span> <span
class="n">DDR2</span> <span class="n">SDRAM</span> <span class="o">-</span>
40<span class="n">GB</span>"
+ <span class="p">},</span>
+ <span class="p">{</span>
+ "<span class="n">ID</span>"<span class="p">:</span>2<span
class="p">,</span>
+ "<span class="n">Name</span>"<span
class="p">:</span>"1<span class="n">UMTS</span> <span
class="n">PDA</span>"<span class="p">,</span>
+ "<span class="n">Description</span>"<span
class="p">:</span>"<span class="n">Ultrafast</span> 3<span
class="n">G</span> <span class="n">UMTS</span><span class="o">/</span><span
class="n">HSDPA</span> <span class="n">Pocket</span> <span
class="n">PC</span><span class="p">,</span> <span class="n">supports</span>
<span class="n">GSM</span> <span class="n">network</span>"
+ <span class="p">},</span>
+ <span class="p">{</span>
+ "<span class="n">ID</span>"<span class="p">:</span>3<span
class="p">,</span>
+ "<span class="n">Name</span>"<span
class="p">:</span>"<span class="n">Ergo</span> <span
class="n">Screen</span>"<span class="p">,</span>
+ "<span class="n">Description</span>"<span
class="p">:</span>"17 <span class="n">Optimum</span> <span
class="n">Resolution</span> 1024 <span class="n">x</span> 768 <span
class="p">@</span> 85<span class="n">Hz</span><span class="p">,</span> <span
class="n">resolution</span> 1280 <span class="n">x</span> 960"
+ <span class="p">}]</span>
+<span class="p">}</span>
+</pre></div>
+
+
<hr />
<h1 id="6-summary">6. Summary</h1>
<p>Finally, weâve created our first OData service based on the V4 version of
the OData specification and using the V4 server library provided by
<em>Olingo</em>.<br />