From ef87dd52b8c05162330657fb44c8e68deee9408f Mon Sep 17 00:00:00 2001 From: Elizabeth Sirkova Date: Thu, 24 Aug 2023 15:04:11 +0200 Subject: [PATCH] Drop dependency on jaxb for converting binary arrays to hex --- java/amazon-kinesis-producer/pom.xml | 15 ---------- .../producer/BinaryToHexConverter.java | 28 +++++++++++++++++++ .../services/kinesis/producer/Daemon.java | 5 ++-- .../kinesis/producer/HashedFileCopier.java | 4 +-- .../producer/BinaryToHexConverterTest.java | 15 ++++++++++ .../producer/HashedFileCopierTest.java | 4 +-- 6 files changed, 47 insertions(+), 24 deletions(-) create mode 100644 java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/BinaryToHexConverter.java create mode 100644 java/amazon-kinesis-producer/src/test/java/com/amazonaws/services/kinesis/producer/BinaryToHexConverterTest.java diff --git a/java/amazon-kinesis-producer/pom.xml b/java/amazon-kinesis-producer/pom.xml index 7ee1b7dd..24b129a6 100644 --- a/java/amazon-kinesis-producer/pom.xml +++ b/java/amazon-kinesis-producer/pom.xml @@ -104,21 +104,6 @@ 4.13.2 test - - javax.xml.bind - jaxb-api - 2.3.1 - - - com.sun.xml.bind - jaxb-core - 2.3.0.1 - - - com.sun.xml.bind - jaxb-impl - 2.3.7 - org.mock-server mockserver-netty-no-dependencies diff --git a/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/BinaryToHexConverter.java b/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/BinaryToHexConverter.java new file mode 100644 index 00000000..094621c4 --- /dev/null +++ b/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/BinaryToHexConverter.java @@ -0,0 +1,28 @@ +package com.amazonaws.services.kinesis.producer; + +public class BinaryToHexConverter { + + private static final BinaryToHexConverter INSTANCE = new BinaryToHexConverter(); + private static final char[] HEX_CODE = "0123456789ABCDEF".toCharArray(); + + /** + * Converts an array of bytes into a hex string. + * + * @param data An array of bytes + * @return A string containing a lexical representation of xsd:hexBinary + * @throws IllegalArgumentException if {@code data} is null. + */ + public static String convert(byte[] data) { + return INSTANCE.convertToHex(data); + } + + private String convertToHex(byte[] data) { + StringBuilder r = new StringBuilder(data.length * 2); + for (byte b : data) { + r.append(HEX_CODE[(b >> 4) & 0xF]); + r.append(HEX_CODE[(b & 0xF)]); + } + return r.toString(); + } + +} diff --git a/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/Daemon.java b/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/Daemon.java index bfff6af7..0c28f563 100644 --- a/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/Daemon.java +++ b/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/Daemon.java @@ -27,7 +27,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.xml.bind.DatatypeConverter; import java.io.File; import java.io.IOException; import java.io.OutputStream; @@ -582,6 +581,6 @@ private static Messages.Message makeSetCredentialsMessage(AWSCredentialsProvider } private static String protobufToHex(com.google.protobuf.Message msg) { - return DatatypeConverter.printHexBinary(msg.toByteArray()); + return BinaryToHexConverter.convert(msg.toByteArray()); } -} +} \ No newline at end of file diff --git a/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/HashedFileCopier.java b/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/HashedFileCopier.java index 91736588..ce52f385 100644 --- a/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/HashedFileCopier.java +++ b/java/amazon-kinesis-producer/src/main/java/com/amazonaws/services/kinesis/producer/HashedFileCopier.java @@ -25,8 +25,6 @@ import java.security.MessageDigest; import java.util.Arrays; -import javax.xml.bind.DatatypeConverter; - import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,7 +51,7 @@ public static File copyFileFrom(InputStream sourceData, File destinationDirector digestOutputStream.close(); byte[] digest = digestOutputStream.getMessageDigest().digest(); log.debug("Calculated digest of new file: {}", Arrays.toString(digest)); - String digestHex = DatatypeConverter.printHexBinary(digest); + String digestHex = BinaryToHexConverter.convert(digest); File finalFile = new File(destinationDirectory, String.format(fileNameFormat, digestHex)); File lockFile = new File(destinationDirectory, String.format(fileNameFormat + LOCK_SUFFIX, digestHex)); log.debug("Preparing to check and copy {} to {}", tempFile.getAbsolutePath(), finalFile.getAbsolutePath()); diff --git a/java/amazon-kinesis-producer/src/test/java/com/amazonaws/services/kinesis/producer/BinaryToHexConverterTest.java b/java/amazon-kinesis-producer/src/test/java/com/amazonaws/services/kinesis/producer/BinaryToHexConverterTest.java new file mode 100644 index 00000000..076c0d5c --- /dev/null +++ b/java/amazon-kinesis-producer/src/test/java/com/amazonaws/services/kinesis/producer/BinaryToHexConverterTest.java @@ -0,0 +1,15 @@ +package com.amazonaws.services.kinesis.producer; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class BinaryToHexConverterTest { + + @Test + public void testConvert() { + byte[] bytes = {0, 1, 2, 3, 124, 125, 126, 127}; + assertEquals("000102037C7D7E7F", BinaryToHexConverter.convert(bytes)); + } + +} \ No newline at end of file diff --git a/java/amazon-kinesis-producer/src/test/java/com/amazonaws/services/kinesis/producer/HashedFileCopierTest.java b/java/amazon-kinesis-producer/src/test/java/com/amazonaws/services/kinesis/producer/HashedFileCopierTest.java index 907387af..fbf9ce28 100644 --- a/java/amazon-kinesis-producer/src/test/java/com/amazonaws/services/kinesis/producer/HashedFileCopierTest.java +++ b/java/amazon-kinesis-producer/src/test/java/com/amazonaws/services/kinesis/producer/HashedFileCopierTest.java @@ -27,8 +27,6 @@ import java.security.DigestInputStream; import java.security.MessageDigest; -import javax.xml.bind.DatatypeConverter; - import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Before; @@ -150,7 +148,7 @@ private File makeTestFile() throws Exception { } private String hexDigestForTestData() throws Exception { - return DatatypeConverter.printHexBinary(hashForTestData()); + return BinaryToHexConverter.convert(hashForTestData()); } private byte[] testDataBytes() throws Exception {