{"record":{"id":"d7662f3b4b216533","repo":"pentaho/pentaho-kettle","slug":"tostring-unable-to-de-serialize-index-storage-type-from-xml","errorCode":null,"errorMessage":"<toString()> : Unable to de-serialize index storage type from XML for data type <getType()>","messagePattern":"<toString\\(\\)> : Unable to de-serialize index storage type from XML for data type <getType\\(\\)>","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java","lineNumber":293,"sourceCode":"                index[i] = Double.parseDouble( valueString );\n                break;\n              case TYPE_INTEGER:\n                index[i] = Long.parseLong( valueString );\n                break;\n              case TYPE_DATE:\n                index[i] = XMLHandler.stringToDate( valueString );\n                break;\n              case TYPE_BIGNUMBER:\n                index[i] = new BigDecimal( valueString );\n                break;\n              case TYPE_BOOLEAN:\n                index[i] = Boolean.valueOf( \"Y\".equalsIgnoreCase( valueString ) );\n                break;\n              case TYPE_BINARY:\n                index[i] = XMLHandler.stringToBinary( valueString );\n                break;\n              default:\n                throw new KettleException( toString()\n                  + \" : Unable to de-serialize index storage type from XML for data type \" + getType() );\n            }\n          }\n        }\n        break;\n\n      case STORAGE_TYPE_BINARY_STRING:\n        // Load the storage meta data...\n        //\n        Node storageMetaNode = XMLHandler.getSubNode( node, \"storage-meta\" );\n        Node storageValueMetaNode = XMLHandler.getSubNode( storageMetaNode, XML_META_TAG );\n        if ( storageValueMetaNode != null ) {\n          storageMetadata = new ValueMetaBase( storageValueMetaNode );\n        }\n        break;\n\n      default:\n        break;","sourceCodeStart":275,"sourceCodeEnd":311,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java#L275-L311","documentation":"Thrown by ValueMetaBase when reading value metadata from XML: the <index> element lists values whose data type is not one of the supported indexed types (String, Number, Integer, Date, Boolean, BigNumber, Binary). Kettle only allows these types for an index storage type, so any other type makes de-serialization impossible.","triggerScenarios":"Calling the XML de-serialization path (e.g. row metadata read via XMLHandler / loadXML) on a ValueMetaBase whose type field is TYPE_NONE, TYPE_SERIALIZABLE, or any type not handled by the index switch; typically produced by hand-edited or corrupted transformation XML where <type> in an indexed value meta is wrong.","commonSituations":"Editing a .ktr/.ktr XML file manually and setting an invalid type for an indexed field; metadata written by a newer/older Kettle version with a type the reader doesn't recognize; corrupted repository export.","solutions":["Open the transformation/step XML and fix the <type> element of the indexed value meta to a supported type (2=Number,3=String,4=Date,5=Boolean,6=Integer,7=Bignumber,8=Binary)","Regenerate the metadata from the GUI instead of hand-editing XML","Verify both writer and reader use compatible Pentaho/Kettle versions","Catch KettleException during XML load and log the value meta name (toString()) to locate the offending field"],"exampleFix":"// before (in .ktr XML inside <index>)\n<type>0</type>  <!-- TYPE_NONE, unsupported for index -->\n// after\n<type>3</type>  <!-- TYPE_STRING -->","handlingStrategy":"validation","validationCode":"// before XML load\nint type = Integer.parseInt(typeElement.getText());\njava.util.Set<Integer> allowed = new java.util.HashSet<>(java.util.Arrays.asList(2,3,4,5,6,7,8));\nif (!allowed.contains(type)) {\n  throw new IllegalArgumentException(\"Index storage type \" + type + \" not supported\");\n}","typeGuard":"// Java has no runtime type guards; validate the parsed type value\nstatic boolean isIndexableType(int type) {\n  switch (type) {\n    case ValueMetaInterface.TYPE_NUMBER: case ValueMetaInterface.TYPE_STRING:\n    case ValueMetaInterface.TYPE_DATE: case ValueMetaInterface.TYPE_BOOLEAN:\n    case ValueMetaInterface.TYPE_INTEGER: case ValueMetaInterface.TYPE_BIGNUMBER:\n    case ValueMetaInterface.TYPE_BINARY: return true;\n    default: return false;\n  }\n}","tryCatchPattern":"try {\n  rowMeta = new RowMeta(xmlStream);\n} catch (KettleException e) {\n  log.error(\"Bad indexed value meta in XML: \" + e.getMessage(), e);\n  throw new StepInitializationException(e);\n}","preventionTips":["Never hand-edit the <type> elements of transformation XML","Keep reader and writer on compatible Kettle/Pentaho versions","Validate generated XML against the Kettle schema before loading","Only use index storage types supported by the value meta API"],"tags":["xml","deserialization","kettle","value-metadata"],"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"}