Skip to Content

OData – Insights to Apache Olingo Incubator

As a continuation of the blog SAP OData Library Contributed to Apache Olingo (Incubator) I wanted to share some further insights into the Apache Olingo Incubator project.

About two years ago SAP started to invest into a new OData Library (Java). Goals for this effort were to implement a library which supports the OData Specification Version 2, which has nearly the same feature set one can find in SAP NetWeaver Gateway and to open source the library at Apache in order to build a developer community around OData.

Mid of 2013 SAP did a software grant of the library and contributed the source code to the newly formed Apache Olingo Incubator project. Shortly after, the project released version 1.0.0 in October 2013 and  version 1.1.0 in February 2014. The next version 1.2.0 is already on its way and currently available as snapshot on Apache Olingo Incubator. There you can also find the release notes. The releases cover the OData Specification Version 2. The committers of the project work constantly on the documentation for users of the open source library and are happy to answer questions via the dev mailing list or via Jira.

In the meanwhile OData evolves to an OASIS standard. So you can watch out for any news in the OASIS OData Technical Committee. The community work now focuses on implementing both client and server libraries for the OASIS OData Standard (Version 4). These efforts are supported by new contributions for Java (ODataClient) and Javascript (datajs), both client libraries for consuming OData Services. 

Apache Olingo tends to evolve into a project hosting OData Implementations in different languages and technologies which is already a great success but the community has also some more milestones to focus on:

  • Graduation, which means that the project leaves the incubator behind and becomes a top level project within the Apache Software Foundation
  • Agreement within the community for a common roadmap of V4 feature development
  • Merge the contributions into a common code base to go forward with the OData OASIS Standard (Version 4) feature development
  • Release a first version of an OData Java Library supporting V4
  • Release a first version of datajs supporting V4

Last but not least I also wanted to share some short facts around Apache Olingo (Incubator):

  • 2 releases, the third one is on its way
  • 19 initial committers
  • 7 new committers
  • 75 persons active on the mailing list
  • 1025 commits in the git repositories
  • more than 1500 mails via dev mailing list
  • more than 150 Jira Issues closed / resolved
  • about 20 tutorials available

With that I think there will be interesting times ahead of us in shaping the future of the Apache Olingo project.

We are interested to know what are your thoughts. So please share your comments, feedback with us by commenting to this post or if you already have more detailed questions or feature requests you may also use the dev mailing list for Apache Olingo directly. We, that is Christian Amend, Tamara Boehm, Michael Bolz, Jens Huesken, Stephan Klevenz, Sven Kobler-Morris and Chandan V.A. as the main initial committers, are happy to answer your questions.

You must be Logged on to comment or reply to a post.
  • What is the release date for 1.3? I see that lot of fixes are there is 1.3, If I have to use 1.3 version how can I do that right now?

  • I've tried a few examples and it seems great!

    I guess you are focusing on the library, however are you planning any tools (Eclipse)? Having gone through the example there is a lot of code which I would think could be auto generated based on a model definition, similar to SAP Gateway?

    Many thanks,


    • Hi Jason,

      yes we are focusing on the library.

      A starting point where tooling comes in is definitely using OData Modelers which produce edmx files. The library itself supports to write a service based on an edmx file without writing the EdmProvider on your own. Maybe that is something to build upon...



  • Hi ,

      I am interested in contributing in the development of Olingo odata version 4.0 compliance work. Can you suggest me a suitable link to start with on the same. I am user of odata4j library at a very basic level right now.



  • Hi,

    We are trying to migrate our OData implementation from the standard odata4j that comes with Netweaver to the Olingo 2.0 library. We are doing this mainly to implement batch calls. Can you help with some sample project because these two libraries are very different from each other?



      • Hi Christian,

        Thanks for your prompt response. As I understand, collections of complex types are not supported in Olingo 2.0. Is there any workaround for this? In our case we have defined a lot of collections of complex types embedded within entity types, changing it will be a huge effort.



        • Hi Siddharth,

          collections of complex types within entity types is not compliant with the OData Version 2.0 protocol version. For that you would have to use OData V3 or higher.

          There is also a Olingo library for OData V4 but not for V3.

          You could change the metadata if possible to model those collections as a navigation to another entity type with multiplicity "one to many".

          Best Regards,


  • Hi Team,

    We are developing an application using Olingo 2.0. I would like to know how can post batch hook be incorporated in annotation based list processor. Following is the use case we have

    • We have an parent entity with multiple childeren. It's something similar to Sales Order Header & Sales Order Items.
    • Since there is no specification available for deep update, we're using batch method to implement CRUD operations on these entities.
    • On successful create/update of all the entities i.e. parent + childeren in the batch, we want to trigger a web service call to external system.

    We are ensuring that rollback happens in case of DB failure during changeset processing by overriding executeChangeSet method. So atomic operation at DB level is ensured.

    What we want in addition to that is, we want to call the external service only after we are done processing all the ODataRequests. Pasting the code from Oling Read Write Batch for your reference.

    for (ODataRequest request : requests) {
          ODataResponse response = handler.handleRequest(request);
          if (response.getStatus().getStatusCode() >= HttpStatusCodes.BAD_REQUEST.getStatusCode()) {
            // Rollback
            List<ODataResponse> errorResponses = new ArrayList<ODataResponse>(1);
            return BatchResponsePart.responses(errorResponses).changeSet(false).build();
    What should be the solution approach in your opinion?