Index: test/main/RulesTest.java
===================================================================
--- test/main/RulesTest.java	(revision 4621)
+++ test/main/RulesTest.java	(working copy)
@@ -41,8 +41,6 @@
 import java.util.concurrent.TimeoutException;
 import java.util.function.BiFunction;
 
-import javax.xml.bind.DatatypeConverter;
-
 import uk.me.parabola.imgfmt.app.Coord;
 import uk.me.parabola.mkgmap.main.StyleTester;
 import uk.me.parabola.mkgmap.osmstyle.ExpressionArranger;
@@ -340,6 +338,18 @@
 		}
 	}
 
+	public static String toHexString(byte[] bytes) {
+	    char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
+	    char[] hexChars = new char[bytes.length * 2];
+	    int v;
+	    for ( int j = 0; j < bytes.length; j++ ) {
+	        v = bytes[j] & 0xFF;
+	        hexChars[j*2] = hexArray[v/16];
+	        hexChars[j*2 + 1] = hexArray[v%16];
+	    }
+	    return new String(hexChars);
+	}
+
 	private void saveFile(String fromName, String rule, int id) {
 		if (!saveErrors || fromName == null)
 			return;
@@ -348,7 +358,7 @@
 		try {
 			MessageDigest md5 = MessageDigest.getInstance("md5");
 			byte[] digest = md5.digest(rule.getBytes("utf-8"));
-			String s = DatatypeConverter.printHexBinary(digest).substring(0, 8);
+			String s = toHexString(digest).substring(0, 8);
 			fileName = String.format("t-%s.test", s);
 		} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
 			fileName = String.format("t-%06d.test", id);
