【问题标题】:Errors when parsing some ISO8583 fields解析某些 ISO8583 字段时出错
【发布时间】:2020-11-25 06:00:48
【问题描述】:

我正在评估 j8583 作为解析 ISO8583 消息的库。它几乎适用于所有字段,但我无法获得字段 33 的正确值。

我创建了以下单元测试:

@Test
public void testDecode() throws IOException, ParseException {
    MessageFactory<IsoMessage> messageFactory = ConfigParser.createFromClasspathConfig("j8583.xml");
    messageFactory.setUseBinaryMessages(true);

    String testData = "0100000000018000000006560103095900000360";
    IsoMessage isoMessage = messageFactory.parseMessage(HexCodec.hexDecode(testData), 0);

    assertEquals("560103", isoMessage.getField(32).toString());
    assertEquals("590000036", isoMessage.getField(33).toString());

}

这是我的配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE j8583-config PUBLIC "-//J8583//DTD CONFIG 1.0//EN" "http://j8583.sourceforge.net/j8583.dtd">

<j8583-config>

    <parse type="0100">
        <field num="32" type="LLBCDBIN" length="11"/>
        <field num="33" type="LLBCDBIN" length="11"/>
    </parse>

</j8583-config>

运行单元测试时,字段 32 解析正确,但 33 失败。我为字段 33 得到的值为 900000360

由于它们都配置相同并且数据似乎相同(06560103095900000360),我不明白为什么这不能正确解析

【问题讨论】:

    标签: j8583


    【解决方案1】:

    对于奇数长度,值是左填充的,而不是右填充的。所以第一个半字节被忽略,而不是最后一个。

    很抱歉,文档中没有明确说明。我将对其进行修改以指定这一点。

    【讨论】:

    • 有没有办法改变这种行为?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多