如何使用jpos处理tlv字段(嵌套tlv)中的tlv数据?

cgh8pdjw  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(392)

我有一个有趣的情况,我很难找到解决办法。
我的一个字段,对于tlv格式的visa字段34电子商务数据,它被定义为具有数据集id+2字节长度+tlv数据。所以本质上,它是一个嵌套的tlv字段。每个标签可以是不同的格式。
换句话说,它是tag+length+<tag+length+value>。
我已经阅读了org.jpos.tlv的github类,到目前为止,这是我的通用打包程序代码:

<isofieldpackager
        id="34"
        length="1024"
        name="Electronic Commerce Data (TLV Format)"
        pad="true"
        class="org.jpos.iso.IFB_LLLLBINARY"
        emitBitmap="false"
        tagMapper="org.jpos.iso.packager.TTDecimalTagMapper"
        packager="org.jpos.iso.packager.GenericTaggedFieldsPackager">

    <isofield
            id="56"
            length="84"
            name="TRACK 2 DATA"
            pad="false"
            class="com.visa.IFB_TTLLCHAR"/>

我的ifb\u ttllchar类:

public class IFB_TTLLCHAR extends ISOTagBinaryFieldPackager {
public IFB_TTLLCHAR() {
    super(0,null, BcdPrefixer.LL, NullPadder.INSTANCE,
            LiteralBinaryInterpreter.INSTANCE, BinaryPrefixer.BB);
}

以及我的java代码:

msg.setMTI("0100");
    TLVList tl = new TLVList();

    //Setting Tags 9F1F and DF1F, converting to decimal first for tag
    tl.append(Integer.parseInt("9F1F",16), "F2F5F54BF2F5F54BF2F5F54BF2F5F5");
    tl.append(Integer.parseInt("DF1F",16),"F7F6");
    msg.set("34.56", tl.pack());

    byte[] b = msg.pack();
    System.out.println("Bytes read: " + b.length);
    System.out.println("The bytes: " + Arrays.toString(b));
    System.out.println(ISOUtil.hexdump(b));
    msg.dump(System.out, "");

    channel.send(msg);

对于像56这样的数字数据集id来说,这个包很好。我从收单机构的审计中得到了我期望的价值

Adtl-pos#34=5600179F1F0FF2F5F54BF2F5F54BF2F5F54BF2F5F5DF1F02F7F6

子字段id变成了数据集id(56),数据集id的长度以某种方式变成了bcd而不是二进制,但这可能是我的收单机构进程的逻辑。正确计算每个标记的长度。一切看起来都像我预期的结果。
但是有几个问题。我不能做字母数字数据集。将数据集从“56”更改为“4a”会导致以下错误:

Exception in thread "main" org.jpos.iso.ISOException: Error reading src/main/resources/visanet.xml 
(org.xml.sax.SAXException: For input string: "4A"
java.lang.NumberFormatException: For input string: "4A")

我以为tagmapper或generictaggedfieldspackager可以处理字母数字标识?所以我不知道如何在xml通用打包程序中处理它。
显然,我觉得我处理得不对。
它也不能从我的另一个程序中正确地解压这个字段的所有字节,但我将把它保存下来,以供另一个问题使用

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题