New HTTP2 module (low level)
diff --git a/core/src/main/java/org/apache/mina/util/ByteBufferDumper.java b/core/src/main/java/org/apache/mina/util/ByteBufferDumper.java
index e351a13..b56e013 100644
--- a/core/src/main/java/org/apache/mina/util/ByteBufferDumper.java
+++ b/core/src/main/java/org/apache/mina/util/ByteBufferDumper.java
@@ -143,7 +143,10 @@
         ByteBuffer res = ByteBuffer.allocate(size);
 
         for (int i = 0; i < size; i++) {
-            int b = ((Character.digit(hex.charAt(i * 2), 16) << 4) | (Character.digit(hex.charAt(i * 2 + 1), 16)));
+            int b = Integer.parseInt(hex.substring(i*2, i*2 + 2), 16);
+            if (Integer.highestOneBit(b) == 128) {
+              b = b - 256;
+            }
             res.put((byte) b);
         }
 
diff --git a/core/src/test/java/org/apache/mina/util/ByteBufferDumperTest.java b/core/src/test/java/org/apache/mina/util/ByteBufferDumperTest.java
index e319521..00985bd 100644
--- a/core/src/test/java/org/apache/mina/util/ByteBufferDumperTest.java
+++ b/core/src/test/java/org/apache/mina/util/ByteBufferDumperTest.java
@@ -92,4 +92,31 @@
         bb.flip();
         assertEquals("000102FE", ByteBufferDumper.toHex(bb));
     }
+    
+    @Test
+    public void checkFromHexStringEmptyStringReturnsEmptyByteArray() {
+        ByteBuffer buffer = ByteBufferDumper.fromHexString("");
+        assertEquals(0, buffer.remaining());
+    }
+    
+    @Test
+    public void checkFromHexStringNormalStringReturnsByteArray() {
+        ByteBuffer buffer = ByteBufferDumper.fromHexString("ff");
+        assertEquals(1, buffer.remaining());
+        assertEquals(-1, buffer.get());
+    }
+    
+    @Test
+    public void checkFromHexStringNormalStringUppercaseReturnsByteArray() {
+        ByteBuffer buffer = ByteBufferDumper.fromHexString("FF");
+        assertEquals(1, buffer.remaining());
+        assertEquals(-1, buffer.get());
+    }
+    
+    @Test(expected=NumberFormatException.class)
+    public void checkFromHexStringInvalidStringReturnsException() {
+        ByteBuffer buffer = ByteBufferDumper.fromHexString("non-hexastring");
+        assertEquals(1, buffer.remaining());
+        assertEquals(-1, buffer.get());
+    }
 }