private static Object invokeMethod(Class clazz, Method method, GenericRequest request, String operation, SAPStatistics timings) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { Object retObject = null; long customTimeStart = System.currentTimeMillis(); if (operation.equals(READ)) { ReadRequest readRequest = (ReadRequest) request; retObject = method.invoke(instanceProvider.getInstance(clazz), readRequest); } else if (operation.equals(QUERY)) { QueryRequest queryRequest = (QueryRequest) request; retObject = method.invoke(instanceProvider.getInstance(clazz), queryRequest); } else if (operation.equals(CREATE)) { CreateRequest createRequest = (CreateRequest) request; retObject = method.invoke(instanceProvider.getInstance(clazz), createRequest); } else if (operation.equals(UPDATE)) { UpdateRequest updateRequest = (UpdateRequest) request; retObject = method.invoke(instanceProvider.getInstance(clazz), updateRequest); } else if (operation.equals(DELETE)) { DeleteRequest deleteRequest = (DeleteRequest) request; retObject = method.invoke(instanceProvider.getInstance(clazz), deleteRequest); } else if (operation.equals(FUNCTION)) { OperationRequest functionRequest = (OperationRequest) request; retObject = method.invoke(instanceProvider.getInstance(clazz), functionRequest); }else if (operation.equals(ACTION)) { OperationRequest actionRequest = (OperationRequest) request; retObject = method.invoke(instanceProvider.getInstance(clazz), actionRequest); } timings.addTimings(SAPStatistics.EXTENSIONDATAPROVIDER, System.currentTimeMillis() - customTimeStart); return retObject; }