From 804078723340188d48a139bc009b85b8bdf37347 Mon Sep 17 00:00:00 2001
From: Georgy Litvinov <git@litvinovg.pro>
Date: Mon, 7 Dec 2020 19:22:23 +0100
Subject: [PATCH] Removed deprecated DataTypeConverter invocations

---
 .../java/w2phtml/base/ImageConverter.java     | 22 ++++++++++++++-----
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/main/java/w2phtml/base/ImageConverter.java b/src/main/java/w2phtml/base/ImageConverter.java
index 011f07b..8fb8cfa 100644
--- a/src/main/java/w2phtml/base/ImageConverter.java
+++ b/src/main/java/w2phtml/base/ImageConverter.java
@@ -33,7 +33,7 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 
-import javax.xml.bind.DatatypeConverter;
+import java.util.Base64;
 
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -253,9 +253,9 @@ public final class ImageConverter {
 	                    buf.append(nl.item(i).getNodeValue());
 	                }
 	            }
-	            //blob = Base64.decode(buf.toString());
-	            blob = DatatypeConverter.parseBase64Binary(buf.toString());
-    			// We may have seen this image before, return the recycled version
+	            blob = Base64.getDecoder().decode(buf.toString());
+	            //blob = DatatypeConverter.parseBase64Binary(buf.toString());
+	            // We may have seen this image before, return the recycled version
 	            String sId1 = createId(blob);
     			if (recycledImages.containsKey(sId1)) {
     				return recycledImages.get(sId1);
@@ -347,8 +347,18 @@ public final class ImageConverter {
 			// This would be surprising
 			return null;
 		}
-    	return DatatypeConverter.printHexBinary(md.digest(blob))
-    			+DatatypeConverter.printHexBinary(Arrays.copyOf(blob, 10));
+    	return bytesToHex(md.digest(blob)) + bytesToHex(Arrays.copyOf(blob, 10));
+    }
+    
+    private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
+    public static String bytesToHex(byte[] bytes) {
+        char[] hexChars = new char[bytes.length * 2];
+        for (int j = 0; j < bytes.length; j++) {
+            int v = bytes[j] & 0xFF;
+            hexChars[j * 2] = HEX_ARRAY[v >>> 4];
+            hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
+        }
+        return new String(hexChars);
     }
     
 }