Skip to content

Commit 2820e51

Browse files
authored
NIFI-15736 Added support of mime type application/x-xz for both compression and decompression in ModifyCompression and for decompression in CompressContent. (#11030)
1 parent fd63e6d commit 2820e51

File tree

5 files changed

+140
-53
lines changed

5 files changed

+140
-53
lines changed

nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/ModifyCompression.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ public class ModifyCompression extends AbstractProcessor {
113113
.build();
114114

115115
public static final PropertyDescriptor OUTPUT_COMPRESSION_STRATEGY = new PropertyDescriptor.Builder()
116-
.name("Output Compression Strategy")
117116
.name("Output Compression Strategy")
118117
.description("The strategy to use for compressing output FlowFiles")
119118
.allowableValues(EnumSet.complementOf(EnumSet.of(CompressionStrategy.MIME_TYPE_ATTRIBUTE)))

nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/main/java/org/apache/nifi/processors/compress/property/CompressionStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public enum CompressionStrategy implements DescribedValue {
2424
GZIP("gzip", "GZIP", ".gz", "application/gzip", "application/x-gzip"),
2525
DEFLATE("deflate", "Deflate", ".zlib", "application/deflate", "application/x-deflate"),
2626
BZIP2("bzip2", "BZIP2", ".bz2", "application/x-bzip2", "application/bzip2"),
27-
XZ_LZMA2("xz-lzma2", "XZ-LZMA2", ".xz", "application/x-lzma"),
27+
XZ_LZMA2("xz-lzma2", "XZ-LZMA2", ".xz", "application/x-xz"),
2828
LZMA("lzma", "LZMA", ".lzma", "application/x-lzma"),
2929
SNAPPY("snappy", "Snappy", ".snappy", "application/x-snappy"),
3030
SNAPPY_HADOOP("snappy-hadoop", "Snappy-Hadoop", ".snappy", "application/x-snappy-hadoop"),

nifi-extension-bundles/nifi-compress-bundle/nifi-compress-processors/src/test/java/org/apache/nifi/processors/compress/TestModifyCompression.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@
2929
import org.junit.jupiter.params.ParameterizedTest;
3030
import org.junit.jupiter.params.provider.Arguments;
3131
import org.junit.jupiter.params.provider.MethodSource;
32+
import org.tukaani.xz.LZMA2Options;
33+
import org.tukaani.xz.XZOutputStream;
3234

35+
import java.io.ByteArrayOutputStream;
3336
import java.io.IOException;
37+
import java.nio.charset.StandardCharsets;
3438
import java.nio.file.Path;
3539
import java.nio.file.Paths;
3640
import java.util.Arrays;
@@ -407,6 +411,41 @@ void testWhereDecompressionNotNeeded(Relationship toRelationship) throws Excepti
407411
runner.assertAllFlowFilesTransferred(expectedRelationship, 1);
408412
}
409413

414+
@Test
415+
public void testXzlzma2DecompressWithMimeType() throws Exception {
416+
final String content = "Content for compression";
417+
final byte[] contentBytes = content.getBytes(StandardCharsets.UTF_8);
418+
final LZMA2Options options = new LZMA2Options();
419+
final ByteArrayOutputStream compressedOutput = new ByteArrayOutputStream();
420+
try (XZOutputStream xzOut = new XZOutputStream(compressedOutput, options)) {
421+
xzOut.write(contentBytes, 0, contentBytes.length);
422+
xzOut.finish();
423+
}
424+
425+
runner.setProperty(ModifyCompression.INPUT_COMPRESSION_STRATEGY, CompressionStrategy.MIME_TYPE_ATTRIBUTE);
426+
runner.setProperty(ModifyCompression.OUTPUT_FILENAME_STRATEGY, FilenameStrategy.UPDATED);
427+
final Map<String, String> attributes = Map.of(CoreAttributes.MIME_TYPE.key(), "application/x-xz");
428+
runner.enqueue(compressedOutput.toByteArray(), attributes);
429+
430+
runner.run();
431+
432+
runner.assertAllFlowFilesTransferred(ModifyCompression.REL_SUCCESS, 1);
433+
final MockFlowFile flowFile = runner.getFlowFilesForRelationship(ModifyCompression.REL_SUCCESS).getFirst();
434+
flowFile.assertContentEquals(content);
435+
}
436+
437+
@Test
438+
public void testXzlzma2Compress() {
439+
runner.setProperty(ModifyCompression.OUTPUT_COMPRESSION_STRATEGY, CompressionStrategy.XZ_LZMA2);
440+
final String content = "Content for compression";
441+
runner.enqueue(content);
442+
runner.run();
443+
444+
runner.assertAllFlowFilesTransferred(ModifyCompression.REL_SUCCESS, 1);
445+
final MockFlowFile flowFile = runner.getFlowFilesForRelationship(ModifyCompression.REL_SUCCESS).getFirst();
446+
flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), "application/x-xz");
447+
}
448+
410449
private static Stream<Arguments> toRelationshipWhenDecompressionNotNeeded() {
411450
final Relationship noRelationSpecified = null;
412451

nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/CompressContent.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,12 +217,14 @@ public class CompressContent extends AbstractProcessor {
217217
Map.entry("application/bzip2", COMPRESSION_FORMAT_BZIP2),
218218
Map.entry("application/x-bzip2", COMPRESSION_FORMAT_BZIP2),
219219
Map.entry("application/x-lzma", COMPRESSION_FORMAT_LZMA),
220+
Map.entry("application/x-xz", COMPRESSION_FORMAT_XZ_LZMA2),
220221
Map.entry("application/x-snappy", COMPRESSION_FORMAT_SNAPPY),
221222
Map.entry("application/x-snappy-hadoop", COMPRESSION_FORMAT_SNAPPY_HADOOP),
222223
Map.entry("application/x-snappy-framed", COMPRESSION_FORMAT_SNAPPY_FRAMED),
223224
Map.entry("application/x-lz4-framed", COMPRESSION_FORMAT_LZ4_FRAMED),
224225
Map.entry("application/zstd", COMPRESSION_FORMAT_ZSTD),
225-
Map.entry("application/x-brotli", COMPRESSION_FORMAT_BROTLI));
226+
Map.entry("application/x-brotli", COMPRESSION_FORMAT_BROTLI)
227+
);
226228

227229
@Override
228230
public Set<Relationship> getRelationships() {

0 commit comments

Comments
 (0)