{"record":{"id":"092bf5c158f96058","repo":"pentaho/pentaho-kettle","slug":"autodoc-exception-unabletorenderreport","errorCode":null,"errorMessage":"AutoDoc.Exception.UnableToRenderReport","messagePattern":"AutoDoc\\.Exception\\.UnableToRenderReport","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/autodoc/AutoDoc.java","lineNumber":124,"sourceCode":"        kettleReportBuilder.createReport();\n        kettleReportBuilder.render();\n\n        Object[] outputRowData = RowDataUtil.allocateRowData( data.outputRowMeta.size() );\n        int outputIndex = 0;\n        outputRowData[outputIndex++] = targetFilename;\n\n        // Pass along the data to the next steps...\n        //\n        putRow( data.outputRowMeta, outputRowData );\n\n        // Add the target file to the result file list\n        //\n        ResultFile resultFile =\n          new ResultFile( ResultFile.FILE_TYPE_GENERAL, targetFile, getTransMeta().getName(), toString() );\n        resultFile.setComment( \"This file was generated by the 'Auto Documentation Output' step\" );\n        addResultFile( resultFile );\n      } catch ( Exception e ) {\n        throw new KettleException( BaseMessages.getString( PKG, \"AutoDoc.Exception.UnableToRenderReport\" ), e );\n      }\n\n      setOutputDone();\n      return false;\n    }\n\n    if ( first ) {\n      first = false;\n\n      data.outputRowMeta = getInputRowMeta().clone();\n      meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,\n        metaStore );\n\n      // Get the filename field index...\n      //\n      String filenameField = environmentSubstitute( meta.getFilenameField() );\n      data.fileNameFieldIndex = getInputRowMeta().indexOfValue( filenameField );\n      if ( data.fileNameFieldIndex < 0 ) {","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/autodoc/AutoDoc.java#L106-L142","documentation":"AutoDoc.processRow throws KettleException wrapping 'AutoDoc.Exception.UnableToRenderReport' when report generation for the Auto Documentation Output step fails. After collecting result files, any exception while rendering the report (target file creation, report engine errors) is wrapped. It means the documentation output file could not be produced.","triggerScenarios":"At runtime in processRow when the report renderer throws: invalid target filename/type (e.g. unsupported extension like .pdf without a renderer), unwritable output directory, or disk full.","commonSituations":"Output folder lacking write permission; output type (PDF/HTML/XLS) whose renderer library is missing; invalid filename from the filename field.","solutions":["Check the output directory exists and the process can write to it.","Verify the target file extension matches a supported report output type (HTML, XLS, PDF) and required renderer libs are on the classpath.","Free disk space if the volume is full.","Test with a simple filename (no special characters) in a temp directory."],"exampleFix":"// before: output file field resolves to /readonly/report.pdf\n// after: point filename field to a writable path like /tmp/report.pdf or grant write access","handlingStrategy":"validation","validationCode":"File outDir = new File(environmentSubstitute(meta.getFilenameField())).getParentFile();\nif (outDir == null || !outDir.canWrite()) {\n  throw new IllegalStateException(\"Output directory missing or not writable: \" + outDir);\n}","typeGuard":null,"tryCatchPattern":"try {\n  processRowInternal();\n} catch (KettleException e) {\n  if (e.getMessage().contains(\"UnableToRenderReport\")) {\n    logError(\"Report render failed: \" + e.getMessage(), e);\n    setErrors(1);\n  }\n}","preventionTips":["Pre-create and permission-check the output directory in the job before the transformation.","Use only supported output types (HTML/XLS/PDF) with renderer libs present.","Monitor free disk space on the output volume."],"tags":["kettle","reporting","file-write","runtime"],"backgroundTag":"file-write-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"}