{"record":{"id":"f251c9f32629b3c5","repo":"pentaho/pentaho-kettle","slug":"userdefinedjavaclassmeta-exception","errorCode":null,"errorMessage":"UserDefinedJavaClassMeta.Exception.UnableToLoadStepInfoFromXML","messagePattern":"UserDefinedJavaClassMeta\\.Exception\\.UnableToLoadStepInfoFromXML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/userdefinedjavaclass/UserDefinedJavaClassMeta.java","lineNumber":408,"sourceCode":"        stepDefinition.stepName = XMLHandler.getTagValue( targetNode, ElementNames.step_name.name() );\n        stepDefinition.description = XMLHandler.getTagValue( targetNode, ElementNames.step_description.name() );\n        targetStepDefinitions.add( stepDefinition );\n      }\n\n      usageParameters.clear();\n      Node parametersNode = XMLHandler.getSubNode( stepnode, ElementNames.usage_parameters.name() );\n      int nrParameters = XMLHandler.countNodes( parametersNode, ElementNames.usage_parameter.name() );\n      for ( int i = 0; i < nrParameters; i++ ) {\n        Node parameterNode = XMLHandler.getSubNodeByNr( parametersNode, ElementNames.usage_parameter.name(), i );\n        UsageParameter usageParameter = new UsageParameter();\n        usageParameter.tag = XMLHandler.getTagValue( parameterNode, ElementNames.parameter_tag.name() );\n        usageParameter.value = XMLHandler.getTagValue( parameterNode, ElementNames.parameter_value.name() );\n        usageParameter.description =\n          XMLHandler.getTagValue( parameterNode, ElementNames.parameter_description.name() );\n        usageParameters.add( usageParameter );\n      }\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"UserDefinedJavaClassMeta.Exception.UnableToLoadStepInfoFromXML\" ), e );\n    }\n  }\n\n  public void setDefault() {\n    // Moved the default code generation out of Meta since the Snippits class is in the UI package which isn't in the\n    // classpath.\n  }\n\n  private boolean checkClassCookings( LogChannelInterface logChannel ) {\n    boolean ok = cookedTransformClass != null && cookErrors.size() == 0;\n    if ( changed ) {\n      cookClasses();\n      if ( cookedTransformClass == null ) {\n        if ( cookErrors.size() > 0 ) {\n          logChannel.logDebug( BaseMessages.getString(\n            PKG, \"UserDefinedJavaClass.Exception.CookingError\", cookErrors.get( 0 ) ) );\n        }","sourceCodeStart":390,"sourceCodeEnd":426,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/userdefinedjavaclass/UserDefinedJavaClassMeta.java#L390-L426","documentation":"UserDefinedJavaClassMeta.readData, invoked from loadXML when deserializing the UDJC step from a .ktr XML file, wraps any exception while parsing definitions/usage parameters into KettleXMLException with key UserDefinedJavaClassMeta.Exception.UnableToLoadStepInfoFromXML. It means the step's XML fragment could not be loaded.","triggerScenarios":"Malformed or unexpected XML in the UDJC step node — missing/renamed element tags, incompatible XML produced by a newer Pentaho version, or corrupted transformation files.","commonSituations":"Opening a transformation created in a newer Pentaho/Kettle version in an older one (XML schema drift); hand-edited .ktr files; truncated/corrupted repository exports.","solutions":["Open the transformation in the same or newer Pentaho version that produced it.","Inspect the UDJC step's XML node for missing/corrupt child elements and repair or re-create the step.","Check the root cause (the wrapped exception 'e' in the stack trace) for the exact XMLHandler failure, e.g. a missing tag value."],"exampleFix":"// XML before (missing required child)\n<definitions><class_name>MyClass</class_name></definitions>\n// after: include all expected elements or re-save the step in Spoon\n<definitions><class_type>TRANSFORM_CLASS</class_type><class_name>MyClass</class_name><class_source>...</class_source></definitions>","handlingStrategy":"try-catch","validationCode":"// before loading, sanity-check the UDJC XML fragment\nString xml = XMLHandler.getTagValue(stepNode, \"definitions\"); if (xml == null) throw new KettleXMLException(\"UDJC step XML missing 'definitions' node\");","typeGuard":"boolean hasUdjcXml(Node stepNode) { return XMLHandler.getTagValue(stepNode, \"definitions\") != null; }","tryCatchPattern":"try { meta.loadXML(stepNode, databases, metaStore); } catch (KettleXMLException e) { logError(\"Failed to load UDJC step from XML\", e); throw e; }","preventionTips":["Open .ktr files with the same or newer Pentaho version that created them","Avoid hand-editing UDJC XML fragments","Keep transformation files under version control to recover from corruption"],"tags":["kettle","udjc","xml","deserialization"],"backgroundTag":"json-unmarshal-failed","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"}