[ 
https://issues.apache.org/jira/browse/OLINGO-55?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chandan V.A resolved OLINGO-55.
-------------------------------

    Resolution: Fixed

> Enable JPA Processor to throw detail errors
> -------------------------------------------
>
>                 Key: OLINGO-55
>                 URL: https://issues.apache.org/jira/browse/OLINGO-55
>             Project: Olingo
>          Issue Type: Sub-task
>          Components: odata2-jpa
>    Affects Versions: 1.1.0
>            Reporter: Chandan V.A
>            Assignee: Chandan V.A
>             Fix For: 1.1.0
>
>
> OData2 JPA Processor throws non detail error messages like 
> "OData - JPA Runtime: JPA create request is not correct"
> To know the real cause for such errors ODataErrorCallBack interface needs to 
> be implemented by respective service factory implementation. To enable quick 
> start to the service development and considering minimal coding to enable JPA 
> models as OData services;  A default error call back implementation for 
> OData2 JPA Processor library will be implemented. The call back can be 
> registered by calling the protected method setDetailErrors(true). The method 
> is part of ODataJPAServiceFactory class.
> An Example Service Factory Implementation
> public class JPAReferenceServiceFactory extends ODataJPAServiceFactory {
>   private static final String PUNIT_NAME = "salesorderprocessing";
>   private static final String MAPPING_MODEL = 
> "SalesOrderProcessingMappingModel.xml";
>   private static final String CONFIG = "Configuration";
>   private static final String SHOW_DETAIL_ERROR = "showdetailerror";
>   @Override
>   public ODataJPAContext initializeODataJPAContext()
>       throws ODataJPARuntimeException {
>     ODataJPAContext oDataJPAContext = getODataJPAContext();
>     
> oDataJPAContext.setEntityManagerFactory(JPAEntityManagerFactory.getEntityManagerFactory(PUNIT_NAME));
>     oDataJPAContext.setPersistenceUnitName(PUNIT_NAME);
>     oDataJPAContext.setJPAEdmMappingModel(MAPPING_MODEL);
>     oDataJPAContext
>         .setJPAEdmExtension((JPAEdmExtension) new 
> SalesOrderProcessingExtension());
>     setErrorLevel(); // Based on parameters from Configuration file set the 
> error level to detail or no detail
>     return oDataJPAContext;
>   }
>   private void setErrorLevel() {
>     ResourceBundle config = ResourceBundle.getBundle(CONFIG);
>     boolean error = Boolean.parseBoolean((String) 
> config.getObject(SHOW_DETAIL_ERROR));
>     setDetailErrors(error);
>   }
> }
> If error level is set to detail, following is the format for the Error 
> (Example based on Eclipselink)
> {
> error: {
> code: null
> message: {
> lang: "en"
> value: ""OData - JPA Runtime: JPA create request is not correct""
> }-
> innererror: "class javax.persistence.RollbackException : Exception 
> [EclipseLink-4002] (Eclipse Persistence Services - 2.3.1.v20111018-r10243): 
> org.eclipse.persistence.exceptions.DatabaseException Internal Exception: 
> java.sql.SQLException: Violation of unique constraint SYS_PK_47: duplicate 
> value(s) for column(s) SO_ID in statement [INSERT INTO T_SALESORDERHEADER 
> (SO_ID, BUYER_ID, BUYER_NAME, CREATIONDATE, CURRENCY_CODE, DELIVERY_STATUS, 
> GROSSAMOUNT, LONG_TEXT, NETAMOUNT, SHORT_TEXT, STATUS, CITY, COUNTRY, 
> HOUSE_NUMBER, STREET_NAME) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 
> ?)] Error Code: -104 Call: INSERT INTO T_SALESORDERHEADER (SO_ID, BUYER_ID, 
> BUYER_NAME, CREATIONDATE, CURRENCY_CODE, DELIVERY_STATUS, GROSSAMOUNT, 
> LONG_TEXT, NETAMOUNT, SHORT_TEXT, STATUS, CITY, COUNTRY, HOUSE_NUMBER, 
> STREET_NAME) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) bind => [2, 
> 2, null, null, null, null, 0.0, null, 0.0, null, null, Chennai, null, 0, 
> null] Query: 
> InsertObjectQuery(org.apache.olingo.odata2.jpa.processor.ref.model.SalesOrderHeader@59729bd9)"
> }-
> }



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to