package com.sap.hana.cloud.samples.benefits.odata.cfg; import org.apache.olingo.odata2.api.commons.HttpStatusCodes; import org.apache.olingo.odata2.api.ep.EntityProvider; import org.apache.olingo.odata2.api.exception.ODataApplicationException; import org.apache.olingo.odata2.api.processor.ODataErrorCallback; import org.apache.olingo.odata2.api.processor.ODataErrorContext; import org.apache.olingo.odata2.api.processor.ODataResponse; import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sap.hana.cloud.samples.benefits.odata.AppODataException; public class SimpleODataErrorCallback implements ODataErrorCallback { private static final Logger LOGGER = LoggerFactory.getLogger(SimpleODataErrorCallback.class); @Override public ODataResponse handleError(final ODataErrorContext context) throws ODataApplicationException { Throwable rootCause = context.getException(); LOGGER.error("Error in the OData. Reason: " + rootCause.getMessage(), rootCause); //$NON-NLS-1$ Throwable innerCause = rootCause.getCause(); if (rootCause instanceof ODataJPAException && innerCause != null && innerCause instanceof AppODataException) { context.setMessage(innerCause.getMessage()); Throwable childInnerCause = innerCause.getCause(); context.setInnerError(childInnerCause != null ? childInnerCause.getMessage() : ""); //$NON-NLS-1$ } else { context.setMessage(HttpStatusCodes.INTERNAL_SERVER_ERROR.getInfo()); context.setInnerError(rootCause.getMessage()); } context.setHttpStatus(HttpStatusCodes.INTERNAL_SERVER_ERROR); return EntityProvider.writeErrorDocument(context); } }