Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I want to add an index to a feature class. To do so, I used the very short and complete example given there:

My modified code is below. When I use that code, I obtain an exception due to a Cast problem; It cannot cast from a IFeatureClass to a ISchemaLock:

Exception in thread "main" java.lang.ClassCastException: com.esri.arcgis.geodatabase.IFeatureClassProxy cannot be cast to com.esri.arcgis.geodatabase.ISchemaLock

Are you able to run this code sucessfully without the error ?

If you want to run this code, you have to change the 2 first string inputs in the code (the path and name of your shapefile)

import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.esriLicenseProductCode;
import com.esri.arcgis.system.esriLicenseStatus;
import com.esri.arcgis.datasourcesfile.ShapefileWorkspaceFactory;
import com.esri.arcgis.geodatabase.Fields;
import com.esri.arcgis.geodatabase.IFeatureClass;
import com.esri.arcgis.geodatabase.IFeatureWorkspace;
import com.esri.arcgis.geodatabase.IField;
import com.esri.arcgis.geodatabase.IFields;
import com.esri.arcgis.geodatabase.IFieldsEdit;
import com.esri.arcgis.geodatabase.IIndex;
import com.esri.arcgis.geodatabase.IIndexEdit;
import com.esri.arcgis.geodatabase.ISchemaLock;
import com.esri.arcgis.geodatabase.IWorkspace;
import com.esri.arcgis.geodatabase.IWorkspaceFactory;
import com.esri.arcgis.geodatabase.Index;
import com.esri.arcgis.geodatabase.esriSchemaLock;

public class classmain
    public static void main(String[] args)

        // >>> Enter here the path and the name of your shapefile.
        String folderPath = "D:\\ShapeFolder\\test";
        String shapefileName = "myShape_022";

        // Step 1: Initialize the Java Component Object Model (COM) Interop.

        // Step 2: Initialize an ArcGIS license.
        AoInitialize aoInit = new AoInitialize();

        // Load the  ShapeFile into "featureClass"
        IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactory();
        IWorkspace workspace = workspaceFactory.openFromFile(folderPath, 0);
        IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
        IFeatureClass featureClass = featureWorkspace.openFeatureClass(shapefileName);

        // Find the field "FID" in featureClass that will be used as an index
        int fieldIndex = featureClass.findField("FID");

        // Get the specified field from the feature class.
        IFields featureClassFields = featureClass.getFields();
        IField field = featureClassFields.getField(fieldIndex);

        // Create a new fields collection and add the specified field to it.
        IFields fields = new Fields();
        IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
        fieldsEdit.setFieldByRef(0, field);

        //Create a new index and cast to the IIndexEdit interface.
        IIndex index = new Index();
        IIndexEdit indexEdit = (IIndexEdit)index;

        // Set the index's properties, including the fields it will have associated with it.

        //Attempt to acquire an exclusive schema lock on the feature class.
        ISchemaLock schemaLock = (ISchemaLock)featureClass;

        //  Disconnect licences 
    catch (IOException ex)
        System.out.println("App failed.");
share|improve this question
try to give specific method. people don't like to see huge code segment. – Emi Apr 23 '13 at 7:10

Ihad the same problem and I resolved it by casting featureClass from IFeatureClass to FeatureClass:

IFeatureClass featureClass = featureWorkspace.openFeatureClass(shapefileName);
FeatureClass featureClass2= new FeatureClass(featureClass);
//Attempt to acquire an exclusive schema lock on the feature class.
  ISchemaLock schemaLock = (ISchemaLock)featureClass2;
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.