diff --git a/src/main/java/com/solab/iso8583/IsoMessage.java b/src/main/java/com/solab/iso8583/IsoMessage.java index 42d3457..21f8670 100644 --- a/src/main/java/com/solab/iso8583/IsoMessage.java +++ b/src/main/java/com/solab/iso8583/IsoMessage.java @@ -373,6 +373,11 @@ public class IsoMessage { } } } else { + ByteArrayOutputStream bout2 = null; + if (forceStringEncoding) { + bout2 = bout; + bout = new ByteArrayOutputStream(); + } int pos = 0; int lim = bs.size() / 4; for (int i = 0; i < lim; i++) { @@ -387,6 +392,15 @@ public class IsoMessage { nibble |= 1; bout.write(HEX[nibble]); } + if (forceStringEncoding) { + final String _hb = new String(bout.toByteArray()); + bout = bout2; + try { + bout.write(_hb.getBytes(encoding)); + } catch (IOException ignore) { + //never happen + } + } } //Fields diff --git a/src/main/java/com/solab/iso8583/MessageFactory.java b/src/main/java/com/solab/iso8583/MessageFactory.java index 1c02a70..86b177a 100644 --- a/src/main/java/com/solab/iso8583/MessageFactory.java +++ b/src/main/java/com/solab/iso8583/MessageFactory.java @@ -328,7 +328,7 @@ public class MessageFactory { try { final byte[] bitmapBuffer; if (forceStringEncoding) { - byte[] _bb = HexCodec.hexDecode(new String(buf, isoHeaderLength+4, 16, encoding)); + byte[] _bb = new String(buf, isoHeaderLength+4, 16, encoding).getBytes(); bitmapBuffer = new byte[36+isoHeaderLength]; System.arraycopy(_bb, 0, bitmapBuffer, 4+isoHeaderLength, 16); } else { @@ -358,7 +358,7 @@ public class MessageFactory { throw new ParseException("Insufficient length for secondary bitmap", minlength); } if (forceStringEncoding) { - byte[] _bb = HexCodec.hexDecode(new String(buf, isoHeaderLength+4, 16, encoding)); + byte[] _bb = new String(buf, isoHeaderLength+4, 16, encoding).getBytes(); System.arraycopy(_bb, 0, bitmapBuffer, 20+isoHeaderLength, 16); } for (int i = isoHeaderLength + 20; i < isoHeaderLength + 36; i++) {