From fcbc9c9ca5de6355211321721c09f7d81925ad1c Mon Sep 17 00:00:00 2001 From: Charles Kayser Date: Sun, 12 Jul 2015 19:16:09 +0200 Subject: [PATCH] fix #49 : start decoding binary composite field from the offset position --- .../com/solab/iso8583/codecs/CompositeField.java | 2 +- .../com/solab/iso8583/parse/TestComposites.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/solab/iso8583/codecs/CompositeField.java b/src/main/java/com/solab/iso8583/codecs/CompositeField.java index d290bcb..3461e76 100644 --- a/src/main/java/com/solab/iso8583/codecs/CompositeField.java +++ b/src/main/java/com/solab/iso8583/codecs/CompositeField.java @@ -79,7 +79,7 @@ public class CompositeField implements CustomBinaryField { public CompositeField decodeBinaryField(byte[] buf, int offset, int length) { @SuppressWarnings("rawtypes") List vals = new ArrayList<>(parsers.size()); - int pos = 0; + int pos = offset; try { for (FieldParseInfo fpi : parsers) { IsoValue v = fpi.parseBinary(0, buf, pos, fpi.getDecoder()); diff --git a/src/test/java/com/solab/iso8583/parse/TestComposites.java b/src/test/java/com/solab/iso8583/parse/TestComposites.java index 3edcc0f..0d9cd45 100644 --- a/src/test/java/com/solab/iso8583/parse/TestComposites.java +++ b/src/test/java/com/solab/iso8583/parse/TestComposites.java @@ -79,4 +79,19 @@ public class TestComposites { Assert.assertEquals("X", f.getValues().get(3).getValue()); } + @Test + public void testDecodeBinaryWithOffset() { + final CompositeField dec = new CompositeField() + .addParser(new LlvarParseInfo()) + .addParser(new NumericParseInfo(5)) + .addParser(new AlphaParseInfo(1)); + int offset = 5; + final CompositeField f = dec.decodeBinaryField(binaryData, offset, this.binaryData.length - offset); + Assert.assertNotNull(f); + Assert.assertEquals(3, f.getValues().size()); + Assert.assertEquals("Two", f.getValues().get(0).getValue()); + Assert.assertEquals(999l, f.getValues().get(1).getValue()); + Assert.assertEquals("X", f.getValues().get(2).getValue()); + } + }