{"record":{"id":"d73eff4a7842385d","repo":"pentaho/pentaho-kettle","slug":"compression-provider-compressiontype-does-not-support-output","errorCode":null,"errorMessage":"Compression provider {compressionType} does not support output streams!","messagePattern":"Compression provider (.+?) does not support output streams!","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/textfileoutput/TextFileOutput.java","lineNumber":106,"sourceCode":"  public boolean isFileExists( String filename ) throws KettleException {\n    try {\n      return getFileObject( filename, getTransMeta() ).exists();\n    } catch ( Exception e ) {\n      throw new KettleException( \"Error opening new file : \" + e.toString() );\n    }\n  }\n\n  private CompressionProvider getCompressionProvider() throws KettleException {\n    String compressionType = Const.NVL( meta.getFileCompression(), FILE_COMPRESSION_TYPE_NONE );\n\n    CompressionProvider compressionProvider = CompressionProviderFactory.getInstance().getCompressionProviderByName( compressionType );\n\n    if ( compressionProvider == null ) {\n      throw new KettleException( \"No compression provider found with name = \" + compressionType );\n    }\n\n    if ( !compressionProvider.supportsOutput() ) {\n      throw new KettleException( \"Compression provider \" + compressionType + \" does not support output streams!\" );\n    }\n    return compressionProvider;\n  }\n\n  private void initServletStreamWriter(  ) throws KettleException {\n    data.writer = null;\n    try {\n      Writer writer = getTrans().getServletPrintWriter();\n      if ( Utils.isEmpty( meta.getEncoding( ) ) ) {\n        data.writer = new WriterOutputStream( writer );\n      } else {\n        data.writer = new WriterOutputStream( writer, meta.getEncoding( ) );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( \"Error opening new file : \" + e.toString() );\n    }\n  }\n","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/textfileoutput/TextFileOutput.java#L88-L124","documentation":"After locating a compression provider by name, TextFileOutput checks supportsOutput(). Some providers (e.g. decompression-only ones like certain input-oriented providers) cannot produce output streams; using one for a text file output target throws this KettleException. The provider exists but is not suitable for writing.","triggerScenarios":"getCompressionProvider -> compressionProvider where the resolved CompressionProvider returns false from supportsOutput(): i.e. the step is configured to write a compressed file using a provider that only supports reading/input streams.","commonSituations":"Selecting a decompression-only provider in the Text File Output dialog; copying a compression setting from a Text File Input step into an Output step; custom/3rd-party compression plugin implementing only input streams.","solutions":["Choose a compression provider that supports output (e.g. 'None', 'Zip', 'GZip') in the Text File Output step","Swap the provider for one whose supportsOutput() returns true (check with the plugin vendor)","If writing is genuinely unsupported, write uncompressed and compress in a post-processing job step"],"exampleFix":"// before\nmeta.setFileCompression( \"SomeReadonlyProvider\" ); // supportsOutput() == false\n// after\nmeta.setFileCompression( \"GZip\" ); // supports writing output streams","handlingStrategy":"validation","validationCode":"CompressionProvider p = CompressionProviderFactory.getInstance()\n  .getCompressionProviderByName( Const.NVL( meta.getFileCompression(), \"None\" ) );\nif ( p != null && !p.supportsOutput() ) {\n  throw new IllegalArgumentException( \"Provider \" + p.getName() + \" cannot write output streams\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  getCompressionProvider();\n} catch ( KettleException e ) {\n  if ( e.getMessage().contains( \"does not support output streams\" ) ) {\n    logError( \"Falling back to uncompressed output\", e );\n    meta.setFileCompression( \"None\" );\n  }\n}","preventionTips":["Use only output-capable providers (None, Zip, GZip) in output steps","Do not copy compression settings from input steps to output steps","Verify supportsOutput() when adopting third-party compression plugins"],"tags":["compression","unsupported-operation","configuration","kettle"],"backgroundTag":"unsupported-operation","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"}