Author: mibo
Date: Wed May 27 10:58:57 2015
New Revision: 1681968
URL: http://svn.apache.org/r1681968
Log:
Fixed sample download links
Modified:
olingo/site/trunk/content/doc/odata4/tutorials/read/tutorial_read.mdtext
olingo/site/trunk/content/doc/odata4/tutorials/readep/tutorial_readep.mdtext
olingo/site/trunk/content/doc/odata4/tutorials/write/tutorial_write.mdtext
Modified:
olingo/site/trunk/content/doc/odata4/tutorials/read/tutorial_read.mdtext
URL:
http://svn.apache.org/viewvc/olingo/site/trunk/content/doc/odata4/tutorials/read/tutorial_read.mdtext?rev=1681968&r1=1681967&r2=1681968&view=diff
==============================================================================
--- olingo/site/trunk/content/doc/odata4/tutorials/read/tutorial_read.mdtext
(original)
+++ olingo/site/trunk/content/doc/odata4/tutorials/read/tutorial_read.mdtext
Wed May 27 10:58:57 2015
@@ -20,7 +20,7 @@ Notice: Licensed to the Apache Softwa
This tutorial guides you through the steps required to write an OData Service
based on the Olingo OData 4.0 Library for Java (based on current *Olingo
4.0.0-beta-03 release* which can be get via the
[Download-Page](../../download.html)).
-The final result can be download [here](sample/DemoService_Tutorial_Read.zip)
([md5](sample/DemoService_Tutorial_Read.zip.md5),
[sha512](sample/DemoService_Tutorial_Read.zip.sha512),
[pgp](sample/DemoService_Tutorial_Read.zip.asc)).
+The final result can be download
[here](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.asc)).
We will create a Web Application and deploy it on a local Tomcat server.
Afterwards, the OData service can be invoked from a browser and it will
provide the data according to the OData V4 specification.
@@ -999,15 +999,15 @@ The expected result is the hardcoded lis
Finally, we have created our first OData service based on the V4 version of
the OData specification and using the V4 server library provided by _Olingo_.
Our first OData service is very simple; it only allows invoking one entity
collection, apart from the service document and the metadata document.
-The project as final result can be download
[here](sample/DemoService_Tutorial_Read.zip)
([md5](sample/DemoService_Tutorial_Read.zip.md5),
[sha512](sample/DemoService_Tutorial_Read.zip.sha512),
[pgp](sample/DemoService_Tutorial_Read.zip.asc)).
+The project as final result can be download
[here](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.asc)).
**Outlook**
Further topics to be covered by follow-up tutorials:
- * Tutorial OData V4 service part 1: [Read Entity Collection (this
page)](/doc/odata4/tutorials/read/tutorial_read.html) | [sample
project](sample/DemoService_Tutorial_Read.zip)
([md5](sample/DemoService_Tutorial_Read.zip.md5),
[sha512](sample/DemoService_Tutorial_Read.zip.sha512),
[pgp](sample/DemoService_Tutorial_Read.zip.asc)).
- * Tutorial OData V4 service part 2: [Read Entity, Read
Property](/doc/odata4/tutorials/readep/tutorial_readep.html) | [sample project
zip](/doc/odata4/tutorials/readep/sample/DemoService_Tutorial_ReadEp.zip)
([md5](sample/DemoService_Tutorial_ReadEp.zip.md5),
[sha512](sample/DemoService_Tutorial_ReadEp.zip.sha512),
[pgp](sample/DemoService_Tutorial_ReadEp.zip.asc))
- * Tutorial OData V4 service part 3: [Write (Create, Update, Delete
Entity)](/doc/odata4/tutorials/write/tutorial_write.html) | [sample project
zip](/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip)
([md5](sample/DemoService_Tutorial_Write.zip.md5),
[sha512](sample/DemoService_Tutorial_Write.zip.zip.sha512),
[pgp](sample/DemoService_Tutorial_Write.zip.asc))
+ * Tutorial OData V4 service part 1: [Read Entity Collection (this
page)](/doc/odata4/tutorials/read/tutorial_read.html) | [sample
project](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.asc)).
+ * Tutorial OData V4 service part 2: [Read Entity, Read
Property](/doc/odata4/tutorials/readep/tutorial_readep.html) | [sample project
zip](/doc/odata4/tutorials/readep/sample/DemoService_Tutorial_ReadEp.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.asc))
+ * Tutorial OData V4 service part 3: [Write (Create, Update, Delete
Entity)](/doc/odata4/tutorials/write/tutorial_write.html) | [sample project
zip](/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.asc))
* Tutorial OData V4 service part 4: [Navigation - (To Be Announced)](...)
Modified:
olingo/site/trunk/content/doc/odata4/tutorials/readep/tutorial_readep.mdtext
URL:
http://svn.apache.org/viewvc/olingo/site/trunk/content/doc/odata4/tutorials/readep/tutorial_readep.mdtext?rev=1681968&r1=1681967&r2=1681968&view=diff
==============================================================================
---
olingo/site/trunk/content/doc/odata4/tutorials/readep/tutorial_readep.mdtext
(original)
+++
olingo/site/trunk/content/doc/odata4/tutorials/readep/tutorial_readep.mdtext
Wed May 27 10:58:57 2015
@@ -33,7 +33,7 @@ Note that this tutorial doesnât cov
Such operations will be the focus of the Olingo V4 tutorial no. 3
**Note**
-The full implementation of the OData service as described in the present
tutorial can be found in the [attached zip
file](/doc/odata4/tutorials/readep/sample/DemoService_Tutorial_ReadEp.zip)
([md5](sample/DemoService_Tutorial_ReadEp.zip.md5),
[sha512](sample/DemoService_Tutorial_ReadEp.zip.sha512),
[pgp](sample/DemoService_Tutorial_ReadEp.zip.asc)) that contains an Eclipse
project that can be imported into your Eclipse workspace.
+The full implementation of the OData service as described in the present
tutorial can be found in the [attached zip
file](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.asc))
that contains an Eclipse project that can be imported into your Eclipse
workspace.
**Disclaimer**
Again, in the present tutorial, We will focus only on the relevant
implementation, in order to keep the code small and simple.
@@ -790,9 +790,9 @@ In the next tutorial ([Part 3: Write](/d
# 6. Links
- * Tutorial OData V4 service part 1: [Read Entity
Collection](/doc/odata4/tutorials/read/tutorial_read.html) | [sample
project](sample/DemoService_Tutorial_Read.zip)
([md5](sample/DemoService_Tutorial_Read.zip.md5),
[sha512](sample/DemoService_Tutorial_Read.zip.sha512),
[pgp](sample/DemoService_Tutorial_Read.zip.asc)).
- * Tutorial OData V4 service part 2: [Read Entity, Read Property (this
page)](/doc/odata4/tutorials/readep/tutorial_readep.html) | [sample project
zip](/doc/odata4/tutorials/readep/sample/DemoService_Tutorial_ReadEp.zip)
([md5](sample/DemoService_Tutorial_ReadEp.zip.md5),
[sha512](sample/DemoService_Tutorial_ReadEp.zip.sha512),
[pgp](sample/DemoService_Tutorial_ReadEp.zip.asc))
- * Tutorial OData V4 service part 3: [Write (Create, Update, Delete
Entity)](/doc/odata4/tutorials/write/tutorial_write.html) | [sample project
zip](/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip)
([md5](sample/DemoService_Tutorial_Write.zip.md5),
[sha512](sample/DemoService_Tutorial_Write.zip.zip.sha512),
[pgp](sample/DemoService_Tutorial_Write.zip.asc))
+ * Tutorial OData V4 service part 1: [Read Entity
Collection](/doc/odata4/tutorials/read/tutorial_read.html) | [sample
project](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.asc)).
+ * Tutorial OData V4 service part 2: [Read Entity, Read Property (this
page)](/doc/odata4/tutorials/readep/tutorial_readep.html) | [sample project
zip](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.asc))
+ * Tutorial OData V4 service part 3: [Write (Create, Update, Delete
Entity)](/doc/odata4/tutorials/write/tutorial_write.html) | [sample project
zip](/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.asc))
OData specification: <http://odata.org/>
Modified:
olingo/site/trunk/content/doc/odata4/tutorials/write/tutorial_write.mdtext
URL:
http://svn.apache.org/viewvc/olingo/site/trunk/content/doc/odata4/tutorials/write/tutorial_write.mdtext?rev=1681968&r1=1681967&r2=1681968&view=diff
==============================================================================
--- olingo/site/trunk/content/doc/odata4/tutorials/write/tutorial_write.mdtext
(original)
+++ olingo/site/trunk/content/doc/odata4/tutorials/write/tutorial_write.mdtext
Wed May 27 10:58:57 2015
@@ -29,8 +29,8 @@ In the first two tutorials ([Read Collec
In the present tutorial, will cover the write operations, which means creating
an entity, modifying an existing entity and deleting an existing entity.
-**Note**
-The full implementation of the OData service as described in the present
tutorial can be found in the [attached zip
file](/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip)
([md5](/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip.md5),
[sha512](/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip.sha512),
[pgp](/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip.asc))
that contains an Eclipse project that can be imported into your Eclipse
workspace.
+**Note**
+The full implementation of the OData service as described in the present
tutorial can be found in the [attached zip
file](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.asc))
that contains an Eclipse project that can be imported into your Eclipse
workspace.
**Disclaimer**
@@ -81,13 +81,13 @@ This is what we are going to do in the b
## 3.1. Implement the createEntity(...) method
-Open the class `myservice.mynamespace.service.DemoEntityProcessor`
-Go to the method `createEntity(...)`
+Open the class `myservice.mynamespace.service.DemoEntityProcessor`
+Go to the method `createEntity(...)`
The method body should be empty, otherwise delete any content.
-**Now, how to implement the method?**
-Basically, we have to do the same that we did in the `readEntity(...)` method,
but the other way âround.
-In the `createEntity(...)` method, we have to retrieve the payload from the
request and then write it to our mock-database.
+**Now, how to implement the method?**
+Basically, we have to do the same that we did in the `readEntity(...)` method,
but the other way âround.
+In the `createEntity(...)` method, we have to retrieve the payload from the
request and then write it to our mock-database.
Furthermore, we have to return the created entity in the response payload.
Again, we can divide our work into 4 steps:
@@ -117,12 +117,12 @@ It is executed as POST request and conta
**Steps**
1. In the implementation, we have to first retrieve the `EntityCollection`
and `EntityType` metadata from the `UriInfo` object.
- 1. The next step is to create the data in our backend.
- For this purpose, we have to retrieve the data from the HTTP request
payload.
+ 1. The next step is to create the data in our backend.
+ For this purpose, we have to retrieve the data from the HTTP request payload.
We get the payload from the `ODataRequest` instance as `InputStream`, which
can then be deserialized.
Our `Storage` class is responsible for creating the new product in the
backend.
- And for returning the newly created instance.
- The reason is that our OData service has to return the newly created entity
in the response body.
+ And for returning the newly created instance.
+ The reason is that our OData service has to return the newly created entity
in the response body.
1. From now on the procedure is the same like in the `readEntity(...)` method
1. The only difference is the status code, that has to be set to **201 -
created** in case of success
@@ -181,7 +181,7 @@ Example request body:
}
-The `updateEntity(...)` method is similar.
+The `updateEntity(...)` method is similar.
Again, we have to retrieve the payload from the HTTP request and use it for
modifying the data in backend.
The difference is that case of update operation, the OData service is not
expected to return any response payload. So we can skip the serialize-step and
simply set the HTTP status code to **204 â no content**
@@ -215,15 +215,15 @@ The difference is that case of update op
}
-In case of update, we have to consider the following:
-The update of an entity can be realized in 2 ways: either a **PATCH** or a
**PUT** request.
+In case of update, we have to consider the following:
+The update of an entity can be realized in 2 ways: either a **PATCH** or a
**PUT** request.
(See the online specification in section [11.4.3 Update an
Entity](http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html)
for more details.
-For both HTTP methods, our `updateEntity(...)` will be invoked.
-But we have to treat the data-modification differently.
-Therefore, we have to first retrieve the used HTTP method and in the
backend-logic, we have to distinguish between **PATCH** and **PUT**.
-The difference becomes relevant only in case if the user doesnât send all
the properties in the request body.
+For both HTTP methods, our `updateEntity(...)` will be invoked.
+But we have to treat the data-modification differently.
+Therefore, we have to first retrieve the used HTTP method and in the
backend-logic, we have to distinguish between **PATCH** and **PUT**.
+The difference becomes relevant only in case if the user doesnât send all
the properties in the request body.
-Example: if we modify the above example request body to look as follows:
+Example: if we modify the above example request body to look as follows:
:::json
{
@@ -233,12 +233,12 @@ Example: if we modify the above example
Note that in this case, only one of three properties is sent in the request
body.
- - If the HTTP method is **PATCH**:
- The value of the *Description* property is updated in the backend.
+ - If the HTTP method is **PATCH**:
+ The value of the *Description* property is updated in the backend.
The values of the other properties remain untouched.
- - If the HTTP method is **PUT**:
- The value of the *Description* property is updated in the backend.
- The value of the other properties is set to null (exception: key
properties can never be null).
+ - If the HTTP method is **PUT**:
+ The value of the *Description* property is updated in the backend.
+ The value of the other properties is set to null (exception: key
properties can never be null).
So letâs have a look at our sample implementation in the `Storage` class
(see below for full sample code and also see the attached zip file containing
the whole sample project)
@@ -293,11 +293,11 @@ Example URL:
http://localhost:8080/DemoService/DemoService.svc/Products(3)
-The implementation is rather simple:
+The implementation is rather simple:
- - As usual, determine the entity set.
- - Delete the data in backend.
- - Configure the response object with the proper status code **204 â no
content**.
+ - As usual, determine the entity set.
+ - Delete the data in backend.
+ - Configure the response object with the proper status code **204 â no
content**.
:::java
public void deleteEntity(ODataRequest request, ODataResponse response,
UriInfo uriInfo)
@@ -328,29 +328,29 @@ In order to test the write operations of
- **POST**
- **PUT**
- **PATCH**
- - **DELETE**
+ - **DELETE**
-This is usually done with any REST client tool that can be installed into the
browser of your choice.
+This is usually done with any REST client tool that can be installed into the
browser of your choice.
Some *REST* clients which are available as browser extension for:
- - Firefox: âRESTClient, a debugger for RESTful web servicesâ
- - Chrome: âAdvanced REST clientâ
+ - Firefox: âRESTClient, a debugger for RESTful web servicesâ
+ - Chrome: âAdvanced REST clientâ
The following sections provide examples for executing the requests:
### 4.1. Example for **CREATE**:
- - URL: <http://localhost:8080/DemoService/DemoService.svc/Products>
+ - URL: <http://localhost:8080/DemoService/DemoService.svc/Products>
- HTTP verb: **POST**
- - Header: `Content-Type: application/json; odata.metadata=minimal`
- - Request body:
+ - Header: `Content-Type: application/json; odata.metadata=minimal`
+ - Request body:
:::json
- {
- "ID":6,
- "Name":"Gamer Mouse",
- "Description":"optical mouse - gamer edition"
+ {
+ "ID":6,
+ "Name":"Gamer Mouse",
+ "Description":"optical mouse - gamer edition"
}
**Note:** The value for the ID property is arbitrary, as it will be
generated by our OData service implementation
@@ -358,46 +358,46 @@ The following sections provide examples
### 4.2. Example for UPDATE (PUT):
- - URL: <http://localhost:8080/DemoService/DemoService.svc/Products(3)>
+ - URL: <http://localhost:8080/DemoService/DemoService.svc/Products(3)>
- HTTP verb: **PUT**
- - Header: `Content-Type: application/json; odata.metadata=minimal`
- - Request body:
+ - Header: `Content-Type: application/json; odata.metadata=minimal`
+ - Request body:
:::json
- {
- "ID":3,
- "Name":"Ergo Screen updated Name",
- "Description":"updated description"
+ {
+ "ID":3,
+ "Name":"Ergo Screen updated Name",
+ "Description":"updated description"
}
### 4.3. Example for UPDATE (PATCH):
- - URL: <http://localhost:8080/DemoService/DemoService.svc/Products(3)>
- - HTTP verb: **PATCH**
- - Header: `Content-Type: application/json; odata.metadata=minimal`
- - Request body:
+ - URL: <http://localhost:8080/DemoService/DemoService.svc/Products(3)>
+ - HTTP verb: **PATCH**
+ - Header: `Content-Type: application/json; odata.metadata=minimal`
+ - Request body:
:::json
- {
- "Description": "patched description"
- }
+ {
+ "Description": "patched description"
+ }
### 4.4. Example for DELETE:
- - URL: <http://localhost:8080/DemoService/DemoService.svc/Products(3)>
- - HTTP verb: **DELETE**
- - Header: Content-Type: application/json; odata.metadata=minimal
+ - URL: <http://localhost:8080/DemoService/DemoService.svc/Products(3)>
+ - HTTP verb: **DELETE**
+ - Header: Content-Type: application/json; odata.metadata=minimal
- Request body: `<empty>`
---
# 5. Summary
-In this tutorial we have learned how to implement the creation, update and
deletion of an entity.
-It has been based on a simple OData model, focusing on simple sample code and
sample data.
+In this tutorial we have learned how to implement the creation, update and
deletion of an entity.
+It has been based on a simple OData model, focusing on simple sample code and
sample data.
In the next tutorial (Part 4: Navigation) we will learn how to implement
navigation, i.e. the linking of resources.
@@ -405,10 +405,10 @@ In the next tutorial (Part 4: Navigation
# 6. Links
- * Tutorial OData V4 service part 1: [Read Entity
Collection](/doc/odata4/tutorials/read/tutorial_read.html) | [sample
project](sample/DemoService_Tutorial_Read.zip)
([md5](sample/DemoService_Tutorial_Read.zip.md5),
[sha512](sample/DemoService_Tutorial_Read.zip.sha512),
[pgp](sample/DemoService_Tutorial_Read.zip.asc)).
- * Tutorial OData V4 service part 2: [Read Entity, Read
Property](/doc/odata4/tutorials/readep/tutorial_readep.html) | [sample project
zip](/doc/odata4/tutorials/readep/sample/DemoService_Tutorial_ReadEp.zip)
([md5](sample/DemoService_Tutorial_ReadEp.zip.md5),
[sha512](sample/DemoService_Tutorial_ReadEp.zip.sha512),
[pgp](sample/DemoService_Tutorial_ReadEp.zip.asc))
- * Tutorial OData V4 service part 3: [Write (Create, Update, Delete Entity)
(this page)](/doc/odata4/tutorials/write/tutorial_write.html) | [sample project
zip](/doc/odata4/tutorials/write/sample/DemoService_Tutorial_Write.zip)
([md5](sample/DemoService_Tutorial_Write.zip.md5),
[sha512](sample/DemoService_Tutorial_Write.zip.zip.sha512),
[pgp](sample/DemoService_Tutorial_Write.zip.asc))
+ * Tutorial OData V4 service part 1: [Read Entity
Collection](/doc/odata4/tutorials/read/tutorial_read.html) | [sample
project](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Read.zip.asc)).
+ * Tutorial OData V4 service part 2: [Read Entity, Read
Property](/doc/odata4/tutorials/readep/tutorial_readep.html) | [sample project
zip](/doc/odata4/tutorials/readep/sample/DemoService_Tutorial_ReadEp.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_ReadEp.zip.asc))
+ * Tutorial OData V4 service part 3: [Write (Create, Update, Delete Entity)
(this page)](/doc/odata4/tutorials/write/tutorial_write.html) | [sample project
zip](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip)
([md5](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.md5),
[sha512](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.zip.sha512),
[pgp](http://www.apache.org/dyn/closer.cgi/olingo/odata4/Tutorial/DemoService_Tutorial_Write.zip.asc))
* Tutorial OData V4 service part 4: [Navigation - (To Be Announced)](...)
-OData specification: <http://odata.org/>
+OData specification: <http://odata.org/>
Olingo Javadoc:
[http://olingo.apache.org/javadoc/odata4/index.html](/javadoc/odata4/index.html)