jpos : Как упаковать DE 55

Я получаю данные, как показано ниже для DE55 в шестнадцатеричном формате

<field id="55" value="3546324130323038343038323032353830303935303530303030303030303030394130333032313031313943303130303946303230363030303030303030323130313946313030383031303130334130303030304441433139463141303230383430394632363038393044324530373242333534463233413946323730313830394633363032303030353946333730343132333435363738" type="binary"/>

Другой конец системы ожидает значения, как показано ниже, в двоичном формате.

где 303736

3037365F2A02084082025800950500000000009A030210119C01009F02060000000021019F1008010103A00000DAC19F1A0208409F260890D2E072B354F23A9F2701809F360200059F370412345678

<field id="55" value="5F2A02084082025800950500000000009A030210119C01009F02060000000021019F1008010103A00000DAC19F1A0208409F260890D2E072B354F23A9F2701809F360200059F370412345678" type="binary"/>

мои настройки упаковщика, которые я использую, приведены ниже, есть ли какой-либо класс (упаковщик поля), доступный в jpos, который даст желаемый результат, или мне нужно создать новый упаковщик настраиваемого поля.

когда я использую ниже, значение отправляется как полученное в сообщении запроса


  <isofield
      id="55"
      length="999"
      name="INTEGRATED CIRCUIT CARD (ICC) SYSTEM-RELATED DATA"
      class="org.jpos.iso.IFA_LLLBINARY"/>

посоветуйте, пожалуйста, какой упаковщик полей можно использовать для DE55, чтобы получить желаемое. В случае, если я хочу создать новый упаковщик настраиваемых полей, что мне делать?

заранее спасибо


person Abrar Sheik    schedule 21.12.2020    source источник


Ответы (1)


Я создал собственный FieldPackager, как показано ниже, который передает байты массива упаковщику.


 public byte[] pack(ISOComponent c) throws ISOException
    {
        try
        {
            byte[] data1 = c.getBytes();

            String de55_received = ISOUtil.hexString(data1);
            byte[] de55_orig_value = DatatypeConverter.parseHexBinary(de55_received);

            String de55_value = new String(de55_orig_value);

            int de55length = de55_value.length();




            byte[] de55_data = new byte[de55length / 2];

            for (int i = 0; i < de55length; i += 2) {
                de55_data[i / 2] = (byte) ((Character.digit(de55_value.charAt(i), 16) << 4)
                        + Character.digit(de55_value.charAt(i+1), 16));
            }

            System.out.println(de55_data);
            System.out.println(DatatypeConverter.printHexBinary(de55_data));

            byte[] data = de55_data;
            int packedLength = prefixer.getPackedLength();

            if (packedLength == 0 && data.length != getLength()) {
                throw new ISOException("Binary data length not the same as the packager length (" + data.length + "/" + getLength() + ")");
            }
            byte[] ret = new byte[interpreter.getPackedLength(data.length) + packedLength];


            prefixer.encodeLength(data.length, ret);
            interpreter.interpret(data, ret, packedLength);
           
            return ret;
        } catch(Exception e) {

            throw new ISOException(makeExceptionMessage(c, "packing"), e);
        }

person Abrar Sheik    schedule 25.12.2020