This is an automated email from the ASF dual-hosted git repository.

pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 2820e519342 NIFI-15736 Added support of mime type application/x-xz for 
both compression and decompression in ModifyCompression and for decompression 
in CompressContent. (#11030)
2820e519342 is described below

commit 2820e519342d5499be3d9849231650e82e3955e4
Author: dan-s1 <[email protected]>
AuthorDate: Thu Mar 26 15:06:00 2026 -0400

    NIFI-15736 Added support of mime type application/x-xz for both compression 
and decompression in ModifyCompression and for decompression in 
CompressContent. (#11030)
---
 .../processors/compress/ModifyCompression.java     |   1 -
 .../compress/property/CompressionStrategy.java     |   2 +-
 .../processors/compress/TestModifyCompression.java |  39 ++++++
 .../nifi/processors/standard/CompressContent.java  |   4 +-
 .../processors/standard/TestCompressContent.java   | 147 ++++++++++++++-------
 5 files changed, 140 insertions(+), 53 deletions(-)

diff --git 
a/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/ModifyCompression.java
 
b/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/ModifyCompression.java
index ff4bb7a5317..31fd48101c6 100644
--- 
a/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/ModifyCompression.java
+++ 
b/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/ModifyCompression.java
@@ -113,7 +113,6 @@ public class ModifyCompression extends AbstractProcessor {
             .build();
 
     public static final PropertyDescriptor OUTPUT_COMPRESSION_STRATEGY = new 
PropertyDescriptor.Builder()
-            .name("Output Compression Strategy")
             .name("Output Compression Strategy")
             .description("The strategy to use for compressing output 
FlowFiles")
             
.allowableValues(EnumSet.complementOf(EnumSet.of(CompressionStrategy.MIME_TYPE_ATTRIBUTE)))
diff --git 
a/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/property/CompressionStrategy.java
 
b/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/property/CompressionStrategy.java
index 0812f111299..df222a84305 100644
--- 
a/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/property/CompressionStrategy.java
+++ 
b/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/property/CompressionStrategy.java
@@ -24,7 +24,7 @@ public enum CompressionStrategy implements DescribedValue {
     GZIP("gzip", "GZIP", ".gz", "application/gzip", "application/x-gzip"),
     DEFLATE("deflate", "Deflate", ".zlib", "application/deflate", 
"application/x-deflate"),
     BZIP2("bzip2", "BZIP2", ".bz2", "application/x-bzip2", 
"application/bzip2"),
-    XZ_LZMA2("xz-lzma2", "XZ-LZMA2", ".xz", "application/x-lzma"),
+    XZ_LZMA2("xz-lzma2", "XZ-LZMA2", ".xz", "application/x-xz"),
     LZMA("lzma", "LZMA", ".lzma", "application/x-lzma"),
     SNAPPY("snappy", "Snappy", ".snappy", "application/x-snappy"),
     SNAPPY_HADOOP("snappy-hadoop", "Snappy-Hadoop", ".snappy", 
"application/x-snappy-hadoop"),
diff --git 
a/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/test/java/org/apache/nifi/processors/compress/TestModifyCompression.java
 
b/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/test/java/org/apache/nifi/processors/compress/TestModifyCompression.java
index adb9bdd8713..154bf56e375 100644
--- 
a/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/test/java/org/apache/nifi/processors/compress/TestModifyCompression.java
+++ 
b/nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/test/java/org/apache/nifi/processors/compress/TestModifyCompression.java
@@ -29,8 +29,12 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
+import org.tukaani.xz.LZMA2Options;
+import org.tukaani.xz.XZOutputStream;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
@@ -407,6 +411,41 @@ class TestModifyCompression {
         runner.assertAllFlowFilesTransferred(expectedRelationship, 1);
     }
 
+    @Test
+    public void testXzlzma2DecompressWithMimeType() throws Exception {
+        final String content = "Content for compression";
+        final byte[] contentBytes = content.getBytes(StandardCharsets.UTF_8);
+        final LZMA2Options options = new LZMA2Options();
+        final ByteArrayOutputStream compressedOutput = new 
ByteArrayOutputStream();
+        try (XZOutputStream xzOut = new XZOutputStream(compressedOutput, 
options)) {
+            xzOut.write(contentBytes, 0, contentBytes.length);
+            xzOut.finish();
+        }
+
+        runner.setProperty(ModifyCompression.INPUT_COMPRESSION_STRATEGY, 
CompressionStrategy.MIME_TYPE_ATTRIBUTE);
+        runner.setProperty(ModifyCompression.OUTPUT_FILENAME_STRATEGY, 
FilenameStrategy.UPDATED);
+        final Map<String, String> attributes = 
Map.of(CoreAttributes.MIME_TYPE.key(), "application/x-xz");
+        runner.enqueue(compressedOutput.toByteArray(), attributes);
+
+        runner.run();
+
+        runner.assertAllFlowFilesTransferred(ModifyCompression.REL_SUCCESS, 1);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(ModifyCompression.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(content);
+    }
+
+    @Test
+    public void testXzlzma2Compress() {
+        runner.setProperty(ModifyCompression.OUTPUT_COMPRESSION_STRATEGY, 
CompressionStrategy.XZ_LZMA2);
+        final String content = "Content for compression";
+        runner.enqueue(content);
+        runner.run();
+
+        runner.assertAllFlowFilesTransferred(ModifyCompression.REL_SUCCESS, 1);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(ModifyCompression.REL_SUCCESS).getFirst();
+        flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), 
"application/x-xz");
+    }
+
     private static Stream<Arguments> 
toRelationshipWhenDecompressionNotNeeded() {
         final Relationship noRelationSpecified = null;
 
diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/CompressContent.java
 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/CompressContent.java
index 0cd982ea3bf..05dff9e6935 100644
--- 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/CompressContent.java
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/CompressContent.java
@@ -217,12 +217,14 @@ public class CompressContent extends AbstractProcessor {
         Map.entry("application/bzip2", COMPRESSION_FORMAT_BZIP2),
         Map.entry("application/x-bzip2", COMPRESSION_FORMAT_BZIP2),
         Map.entry("application/x-lzma", COMPRESSION_FORMAT_LZMA),
+        Map.entry("application/x-xz", COMPRESSION_FORMAT_XZ_LZMA2),
         Map.entry("application/x-snappy", COMPRESSION_FORMAT_SNAPPY),
         Map.entry("application/x-snappy-hadoop", 
COMPRESSION_FORMAT_SNAPPY_HADOOP),
         Map.entry("application/x-snappy-framed", 
COMPRESSION_FORMAT_SNAPPY_FRAMED),
         Map.entry("application/x-lz4-framed", COMPRESSION_FORMAT_LZ4_FRAMED),
         Map.entry("application/zstd", COMPRESSION_FORMAT_ZSTD),
-        Map.entry("application/x-brotli", COMPRESSION_FORMAT_BROTLI));
+        Map.entry("application/x-brotli", COMPRESSION_FORMAT_BROTLI)
+    );
 
     @Override
     public Set<Relationship> getRelationships() {
diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestCompressContent.java
 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestCompressContent.java
index 8dd9f7f60da..e57534b12a0 100644
--- 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestCompressContent.java
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestCompressContent.java
@@ -21,8 +21,13 @@ import org.apache.nifi.util.MockFlowFile;
 import org.apache.nifi.util.TestRunner;
 import org.apache.nifi.util.TestRunners;
 import org.junit.jupiter.api.Test;
+import org.tukaani.xz.LZMA2Options;
+import org.tukaani.xz.XZOutputStream;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.Map;
@@ -31,6 +36,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class TestCompressContent {
 
+    private static final Path SAMPLE_TEXT_FILE = 
Paths.get("src/test/resources/CompressedData/SampleFile.txt");
+    private static final Path SAMPLE_GZ_FILE = 
Paths.get("src/test/resources/CompressedData/SampleFile.txt.gz");
+
     @Test
     public void testSnappyCompress() throws Exception {
         final TestRunner runner = 
TestRunners.newTestRunner(CompressContent.class);
@@ -38,11 +46,11 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, 
CompressContent.COMPRESSION_FORMAT_SNAPPY);
         runner.setProperty(CompressContent.UPDATE_FILENAME, "true");
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        runner.enqueue(SAMPLE_TEXT_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), 
"application/x-snappy");
         flowFile.assertAttributeEquals("filename", "SampleFile.txt.snappy");
     }
@@ -58,8 +66,8 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
     }
 
@@ -70,11 +78,11 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, 
CompressContent.COMPRESSION_FORMAT_SNAPPY_HADOOP);
         runner.setProperty(CompressContent.UPDATE_FILENAME, "true");
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        runner.enqueue(SAMPLE_TEXT_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), 
"application/x-snappy-hadoop");
         flowFile.assertAttributeEquals("filename", "SampleFile.txt.snappy");
     }
@@ -96,11 +104,11 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, 
CompressContent.COMPRESSION_FORMAT_SNAPPY_FRAMED);
         runner.setProperty(CompressContent.UPDATE_FILENAME, "true");
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        runner.enqueue(SAMPLE_TEXT_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), 
"application/x-snappy-framed");
         flowFile.assertAttributeEquals("filename", "SampleFile.txt.sz");
     }
@@ -116,8 +124,8 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
     }
 
@@ -132,7 +140,7 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFileConcat.txt"));
         flowFile.assertAttributeEquals("filename", 
"SampleFileConcat.txt.bz2"); // not updating filename
     }
@@ -148,8 +156,8 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
 
         runner.clearTransferState();
@@ -157,8 +165,8 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile1.txt");
     }
 
@@ -169,11 +177,11 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, "bzip2");
         runner.setProperty(CompressContent.UPDATE_FILENAME, "false");
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        runner.enqueue(SAMPLE_TEXT_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         flowFile.assertAttributeEquals("mime.type", "application/x-bzip2");
     }
 
@@ -191,8 +199,8 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
 
         // ensure that we can decompress with a mime type of 
application/bzip2. The appropriate mime type is
@@ -204,8 +212,8 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile1.txt");
     }
 
@@ -216,12 +224,12 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, "gzip");
         assertTrue(runner.setProperty(CompressContent.UPDATE_FILENAME, 
"true").isValid());
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt.gz"));
+        runner.enqueue(SAMPLE_GZ_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
 
         runner.clearTransferState();
@@ -229,20 +237,19 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile1.txt");
 
         runner.clearTransferState();
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, 
CompressContent.COMPRESSION_FORMAT_ATTRIBUTE);
-        Map<String, String> attributes = new HashMap<>();
-        attributes.put(CoreAttributes.MIME_TYPE.key(), "application/x-gzip");
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt.gz"),
 attributes);
+        Map<String, String> attributes = 
Map.of(CoreAttributes.MIME_TYPE.key(), "application/x-gzip");
+        runner.enqueue(SAMPLE_GZ_FILE, attributes);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
     }
 
@@ -257,8 +264,8 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
     }
 
@@ -270,11 +277,11 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, "deflate");
         assertTrue(runner.setProperty(CompressContent.UPDATE_FILENAME, 
"true").isValid());
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        runner.enqueue(SAMPLE_TEXT_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt.zlib"));
         flowFile.assertAttributeEquals("filename", "SampleFile.txt.zlib");
     }
@@ -286,11 +293,11 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, "gzip");
         assertTrue(runner.setProperty(CompressContent.UPDATE_FILENAME, 
"true").isValid());
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        runner.enqueue(SAMPLE_TEXT_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         flowFile.assertAttributeEquals("filename", "SampleFile.txt.gz");
 
     }
@@ -309,7 +316,7 @@ public class TestCompressContent {
         runner.assertQueueEmpty();
         runner.assertAllFlowFilesTransferred(CompressContent.REL_FAILURE, 1);
 
-        
runner.getFlowFilesForRelationship(CompressContent.REL_FAILURE).get(0).assertContentEquals(data);
+        
runner.getFlowFilesForRelationship(CompressContent.REL_FAILURE).getFirst().assertContentEquals(data);
     }
 
     @Test
@@ -319,11 +326,11 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, 
CompressContent.COMPRESSION_FORMAT_LZ4_FRAMED);
         runner.setProperty(CompressContent.UPDATE_FILENAME, "true");
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        runner.enqueue(SAMPLE_TEXT_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), 
"application/x-lz4-framed");
         flowFile.assertAttributeEquals("filename", "SampleFile.txt.lz4");
     }
@@ -339,8 +346,8 @@ public class TestCompressContent {
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
     }
 
@@ -351,11 +358,11 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, 
CompressContent.COMPRESSION_FORMAT_ZSTD);
         runner.setProperty(CompressContent.UPDATE_FILENAME, "true");
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        runner.enqueue(SAMPLE_TEXT_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), 
"application/zstd");
         flowFile.assertAttributeEquals("filename", "SampleFile.txt.zst");
     }
@@ -369,8 +376,8 @@ public class TestCompressContent {
         
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt.zst"));
         runner.run();
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
     }
 
@@ -381,11 +388,11 @@ public class TestCompressContent {
         runner.setProperty(CompressContent.COMPRESSION_FORMAT, 
CompressContent.COMPRESSION_FORMAT_BROTLI);
         runner.setProperty(CompressContent.UPDATE_FILENAME, "true");
 
-        
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        runner.enqueue(SAMPLE_TEXT_FILE);
         runner.run();
 
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
         flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), 
"application/x-brotli");
         flowFile.assertAttributeEquals("filename", "SampleFile.txt.br");
     }
@@ -399,8 +406,48 @@ public class TestCompressContent {
         
runner.enqueue(Paths.get("src/test/resources/CompressedData/SampleFile.txt.br"));
         runner.run();
         runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).get(0);
-        
flowFile.assertContentEquals(Paths.get("src/test/resources/CompressedData/SampleFile.txt"));
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(SAMPLE_TEXT_FILE);
         flowFile.assertAttributeEquals("filename", "SampleFile.txt");
     }
+
+    @Test
+    public void testXzlzma2DecompressWithMimeType() throws Exception {
+        final String content = "Content for compression";
+        final byte[] contentBytes = content.getBytes(StandardCharsets.UTF_8);
+        final LZMA2Options options = new LZMA2Options();
+        final ByteArrayOutputStream compressedOutput = new 
ByteArrayOutputStream();
+        try (XZOutputStream xzOut = new XZOutputStream(compressedOutput, 
options)) {
+            xzOut.write(contentBytes, 0, contentBytes.length);
+            xzOut.finish();
+        }
+
+        final TestRunner runner = 
TestRunners.newTestRunner(CompressContent.class);
+        runner.setProperty(CompressContent.MODE, "decompress");
+        runner.setProperty(CompressContent.COMPRESSION_FORMAT, 
CompressContent.COMPRESSION_FORMAT_ATTRIBUTE);
+
+        final Map<String, String> attributes = Map.of("mime.type", 
"application/x-xz");
+        runner.enqueue(compressedOutput.toByteArray(), attributes);
+        runner.run();
+
+        runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertContentEquals(content);
+    }
+
+    @Test
+    public void testXzlzma2Compress() throws Exception {
+        final TestRunner runner = 
TestRunners.newTestRunner(CompressContent.class);
+        runner.setProperty(CompressContent.MODE, 
CompressContent.MODE_COMPRESS);
+        runner.setProperty(CompressContent.COMPRESSION_FORMAT, 
CompressContent.COMPRESSION_FORMAT_XZ_LZMA2);
+        runner.setProperty(CompressContent.UPDATE_FILENAME, "true");
+        runner.enqueue(SAMPLE_TEXT_FILE);
+
+        runner.run();
+
+        runner.assertAllFlowFilesTransferred(CompressContent.REL_SUCCESS, 1);
+        final MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(CompressContent.REL_SUCCESS).getFirst();
+        flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), 
"application/x-xz");
+        flowFile.assertAttributeEquals("filename", "SampleFile.txt.xz");
+    }
 }

Reply via email to