Так что я освоился с jPOS, не являясь экспертом ни в каком смысле.
Моя спецификация определила F35 Track 2 следующим образом:
"Variable Length, 1 byte binary + 37 N, 4-bit BCD (unsigned packed); maximum 20 bytes"
Поэтому я определил это поле в своем GenericPackager:
<isofield
id="35"
length="37"
name="TRACK 2 DATA"
pad="true"
class="org.jpos.iso.IFB_LLHNUM"/>
Насколько я понимаю, B для упакованного двоичного кодирования, LL для переменной длины 37, H отправляет длину в виде 1-байтового двоичного кода, а NUM для числовых данных, следующих за длиной.
Это правильно?
Итак, в моем проекте у меня есть следующий код:
ISOPackager packager = new GenericPackager("src/main/resources/vapsms_modified.xml");
BaseChannel channel = new VAPChannel(host, port, packager);
channel.connect();
ISOMsg msg = new ISOMsg();
msg.setPackager(packager);
msg.setMTI("0100");
...
msg.set("35","4123456891023456D49121010000020100000");
...
channel.send(msg);
Мой процесс получения получает F35 следующим образом:
Trk2#35=4123456891023457449121010000020100000
Итак, очевидно, что разделитель 'D' - это не число, а CHAR.
Я просмотрел доступные ISOFieldPackagers, но не могу найти ни одного класса, который обрабатывает разделители символов в числовых данных.
Единственное, что упоминается в моей спецификации, это
The Track 2 delimiter/separator character (^) must be encoded as X'D' (binary 1101).
Как я могу отправить разделитель символов для этого поля?
Любая помощь приветствуется!