{"record":{"id":"eeb3317ed62eb7aa","repo":"pentaho/pentaho-kettle","slug":"unable-to-parse-shape-type-shapetype-not-yet-implemented","errorCode":null,"errorMessage":"Unable to parse shape type [${shapeType}] : not yet implemented.","messagePattern":"Unable to parse shape type \\[(.+?)\\] : not yet implemented\\.","errorType":"exception","errorClass":"KettleStepException","httpStatus":null,"severity":"error","filePath":"plugins/shapefilereader/core/src/main/java/org/pentaho/di/shapefilereader/ShapeFileReader.java","lineNumber":334,"sourceCode":"        Object[] dbfData = si.getDbfData();\n        RowMetaInterface dbfMeta = si.getDbfMeta();\n        for ( int d = 0; d < dbfMeta.size(); d++ ) {\n          outputRow[ outputIndex++ ] = dbfData[ d ];\n        }\n\n        linesInput++;\n\n        // Put it out to the rest of the world...\n        try {\n          putRow( data.outputRowMeta, data.outputRowMeta.cloneRow( outputRow ) );\n        } catch ( KettleValueException e ) {\n          throw new KettleStepException( \"Unable to clone row\", e );\n        }\n        break;\n      default:\n        System.out.println(\n          \"Unable to parse shape type [\" + Shape.getEsriTypeDesc( si.getType() ) + \"] : not yet implemented.\" );\n        throw new KettleStepException(\n          \"Unable to parse shape type [\" + Shape.getEsriTypeDesc( si.getType() ) + \"] : not yet implemented.\" );\n    }\n\n    // Next shape please!\n    data.shapeNr++;\n\n    if ( ( linesInput % Const.ROWS_UPDATE ) == 0 ) {\n      logBasic( \"linenr \" + linesInput );\n    }\n\n    return retval;\n  }\n\n  public boolean init( StepMetaInterface smi, StepDataInterface sdi ) {\n    meta = (ShapeFileReaderMeta) smi;\n    data = (ShapeFileReaderData) sdi;\n\n    if ( super.init( meta, data ) ) {","sourceCodeStart":316,"sourceCodeEnd":352,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/shapefilereader/core/src/main/java/org/pentaho/di/shapefilereader/ShapeFileReader.java#L316-L352","documentation":"ShapeFileReader.processRow throws this KettleStepException when a shape record has an ESRI shape type the step has no parsing branch for (the switch's default case). The shapefile format defines many geometry types, but this step only implements a subset; anything else is unparseable. The same message is also printed to stdout before throwing.","triggerScenarios":"Processing a .shp whose shape header type (Shape.getEsriTypeDesc(si.getType())) is not one of the implemented types in the switch (e.g. PointM, PointZ, MultiPatch, MultiPoint variants). Occurs mid-transformation while iterating shapes via processRow.","commonSituations":"Users point the ShapeFileReader step at modern or exotic shapefiles (Z/M geometries, MultiPatch from 3D GIS exports) that contain geometry types the plugin was never extended to support.","solutions":["Identify the shape type in the .shp file (e.g. with ogrinfo -so or a GIS tool) and re-export/convert the data to a supported type such as Polygon or Polyline.","Use a different input step (e.g. a GDAL/OGR-based or CSV export) for unsupported geometry types.","Patch ShapeFileReader.processRow to add a case for the needed shape type and rebuild the plugin.","Filter out or preprocess records with unsupported types before the step."],"exampleFix":"// before\nswitch ( type ) {\n  case Shape.SHAPE_TYPE_POLYGON:\n    ...\n  default:\n    throw new KettleStepException( \"Unable to parse shape type ...\" );\n}\n// after\nswitch ( type ) {\n  case Shape.SHAPE_TYPE_POLYGON:\n    ...\n  case Shape.SHAPE_TYPE_POINT_Z: // newly supported\n    si = new ShapePointZ( content );\n    break;\n  default:\n    throw new KettleStepException( \"Unable to parse shape type ...\" );\n}","handlingStrategy":"validation","validationCode":"int shapeType = si.getType();\nSet<Integer> supported = Set.of( Shape.SHAPE_TYPE_POINT, Shape.SHAPE_TYPE_POLYGON, Shape.SHAPE_TYPE_POLYLINE );\nif ( !supported.contains( shapeType ) ) {\n  throw new KettleException( \"Unsupported shape type \" + Shape.getEsriTypeDesc( shapeType ) + \" — convert the file first\" );\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run ogrinfo -so file.shp to check the geometry type before pointing the step at it.","Convert Z/M and MultiPatch geometries to planar types with ogr2ogr -nlt.","Keep shapefiles in a documented, tested subset of types for your pipeline."],"tags":["shapefile","gis","unsupported-geometry-type","kettle"],"backgroundTag":"unsupported-enum-value","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}