Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Olingo Wiki" for change 
notification.

The "ojp-howto-custom-jpa-processor" page has been changed by chandanva:
https://wiki.apache.org/Olingo/ojp-howto-custom-jpa-processor

Comment:
How To create custom OData JPA processor

New page:
=== How to write Custom OData JPA Processor ===

==== Overview ====
OData JPA processor provides a way to transform an existing JPA model as EDM 
with no or minimalistic coding. It also processes the OData request and 
generates OData response. However at times it is required for an application to 
perform some pre-processing of request and post-processing of response. To 
enable pre and post processing in the application following steps needs to be 
performed.

{{{
The feature is supported from Apache Olingo release 1.1.0 onwards.
}}}

----

'''Step 1''': Write a Custom OData JPA Processor

You could write a custom OData JPA processor by extending the class 
org.apache.olingo.odata2.jpa.processor.api.ODataJPAProcessor.

{{{
public class CustomODataJPAProcessor {
    
  @Override
  public ODataResponse readEntitySet(final GetEntitySetUriInfo 
uriParserResultView, final String contentType)
      throws ODataException {
    
    /* Pre Process Step */
    preprocess ( );

    List<Object> jpaEntities = jpaProcessor.process(uriParserResultView);
    
    /* Post Process Step */
    postProcess( );

    ODataResponse oDataResponse =
        responseBuilder.build(uriParserResultView, jpaEntities, contentType);

    return oDataResponse;
  }

}
}}}

In the above code snippet preprocess and postProcess are the two private 
methods that can be written to process the request and response.
The instance variable (part of ODataJPAProcessor) '''jpaProcessor''' can be 
used to process the OData request. The jpaProcessor returns the JPA entities 
after processing the OData request. The instance variable '''responseBuilder''' 
can be used for building the OData response from the processed JPA entities.

----

'''Step 2''': Write a Custom OData JPA Service Factory

As a second step implement an OData JPA service factory to create an OData 
service with custom OData JPA processor. The default service factory 
'''org.apache.olingo.odata2.jpa.processor.api.ODataJPAServiceFactory''' part of 
the library cannot be used. Hence create a class by extending 
'''org.apache.olingo.odata2.api.ODataServiceFactory'''. Copy the entire code 
from ODataJPAServiceFactory and just replace the code as shown below.

{{{
ODataSingleProcessor odataJPAProcessor = 
accessFactory.createODataProcessor(oDataJPAContext);

with 

ODataSingleProcessor odataJPAProcessor = new 
CustomODataJPAProcessor(oDataJPAContext);
}}}

With the above two steps a custom OData JPA processor can be hooked to the 
existing flow.

Reply via email to