Menu

Duda con j8583

2017-06-26
2017-06-26
  • Ronald Omar Orantes de León

    Buen día Enrique, Gracias por esta librería que al parecer funciona muy bien, solo que en lo personal algo estoy haciendo mal para parsear las tramas que recibo en mi aplicación, debo comenzar diciendo que tengo la especificación de tramas de la siguiente manera.

    ISO0140000500200F2388001288000000000000002000000180000000031023715793000400000020000001127165806220000115806112711271110000000001370088010000013954185D0000000000000000009038201273409038201        18000000000000000211
    

    Descompuesta esta trama quedaría de la siguiente manera

    Protocol Header:  Protocol Header
    Base 24 Header: ISO014000050 
    MTI: 0200
    Bitmap Secundario: F238800128800000
    Monto de la transaccion: 0000000002000000
    Numero de cuenta : 18000000003102371579
    Codigo de proceso: 301140
    Valor: 000002000000
    Fecha y Hora: 1127165806
    Numero de Trace: 220000
    Hora Local: 115806
    Fecha Local: 1127
    Fecha Compensacion: 1127
    Codigo adquiriente: 1110000000001
    Datos adicionales: 370088010000013954185D00000000000000000
    Numero referencia: 090382012734
    Identificación operador: 09038201        
    Codigo empresa:  18000000000000000249
    

    Mi archivo de configuración lo tengo de la siguiente manera:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE isopackager SYSTEM "j8583.dtd">
    <j8583-config>
        <header type="0200">ISO014000050</header>
        <header type="0210">ISO014000050</header>
        <header type="0220">ISO014000050</header>
        <header type="0230">ISO014000050</header>
        <parse type="0200">
            <field num="1" type="BINARY" length="32" />
            <field num="2" type="LLVAR"  />
            <field num="3" type="NUMERIC"  length="6"/>
            <field num="4" type="AMOUNT" length="12" />
            <field num="7" type="DATE10" />
            <field num="11" type="NUMERIC" length="6"/>
            <field num="12" type="TIME" length="6"/>
            <field num="13" type="DATE4" />
            <field num="17" type="DATE4" />
            <field num="32" type="LLVAR" />
            <field num="35" type="LLVAR"  />
            <field num="37" type="NUMERIC" length="12" />
            <field num="38" type="NUMERIC" length="6" />
            <field num="39" type="ALPHA" length="2" />
            <field num="41" type="ALPHA" length="16" />
            <field num="54" type="LLVAR" />
            <field num="103" type="LLVAR" />
        </parse>
        <parse type="0210" ref="0200"/>
        <parse type="0220" ref="0200"/>
        <parse type="0230" ref="0200"/>
    
    </j8583-config>
    

    Debido a que la trama viene plana traté de generar un programita a manera de ejemplo para realizar el parseo de mi tramael cual me quedó así:

    public class MainClass {
        private static Logger logger = LoggerFactory.getLogger(MainClass.class);
    
        public static void print(IsoMessage m) {
            System.out.printf("TYPE: %04x\n", m.getType());
            for (int i = 2; i < 128; i++) {
                if (m.hasField(i)) {
                    System.out.printf("F %3d(%s): %s -> '%s'\n", i, m.getField(i).getType(), m.getObjectValue(i),
                            m.getField(i).toString());
                }
            }
        }
    
        public void parse() {
            try {
                String msg = "ISO0140000500200F23880012A8000000400000002000000180000000031523151143000400000020000001127165806220000115806112711271110000000001370088010000013954185D000000000000000000903820127340009038201        00118000000000000000211";
                IsoMessage isoMessage = null;
                InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("/home/ronald/COMPARTIDA/Configuraciones-erm/ATH_TRAMAiso.xml")));
                MessageFactory<IsoMessage> mfact = new MessageFactory<>();
                ConfigParser.configureFromReader(mfact, isr);
    
                mfact.setAssignDate(true);
                mfact.setTraceNumberGenerator(new SimpleTraceGenerator((int)(System.currentTimeMillis() % 10000)));
    
                mfact.setUseBinaryMessages(true);
                isoMessage = mfact.parseMessage(msg.getBytes(), 12);
                print(isoMessage);
            }catch(Exception e){
                logger.error("Error parsing trace",e);
            }
    
        }
    
        public static void main(String[] args) {
            MainClass main = new MainClass();
            main.parse();
    
        }
    
    }
    

    Al correrlo me devuelve esta excepción:

    2017-06-26 18:25:08 ERROR [] [] com.solab.iso8583.MessageFactory - ISO8583 MessageFactory has no parsing guide for message type 3032 [ISO0140000500200F23880012A8000000400000002000000180000000031523151143000400000020000001127165806220000115806112711271110000000001370088010000013954185D000000000000000000903820127340009038201        00118000000000000000211]
    2017-06-26 18:25:08 ERROR [] [] com.prueba.parse.MainClass - Error parsing trace
    java.text.ParseException: ISO8583 MessageFactory has no parsing guide for message type 3032 [ISO0140000500200F23880012A8000000400000002000000180000000031523151143000400000020000001127165806220000115806112711271110000000001370088010000013954185D000000000000000000903820127340009038201        00118000000000000000211]
        at com.solab.iso8583.MessageFactory.parseMessage(MessageFactory.java:435) ~[j8583-1.12.0.jar:na]
        at com.solab.iso8583.MessageFactory.parseMessage(MessageFactory.java:298) ~[j8583-1.12.0.jar:na]
        at com.prueba.parse.MainClass.parse(MainClass.java:41) [classes/:na]
        at com.prueba.parse.MainClass.main(MainClass.java:52) [classes/:na]
    

    Sospecho que mi problema está en los 2 primeros campos según la descomposición inicial que hice de la trama ya que el protocol header, y el Base 24 header no aparecen en el estandar de ISO8583 pero vienen dentro de las tramas que debo interpretar.

    Si pudieras ayudarme identificando mi problema te lo agradeceré bastante.
    Saludos.

     

    Last edit: Ronald Omar Orantes de León 2017-06-27
  • Enrique Zamudio Lopez

    Please report issues in https://github.com/chochos/j8583/issues

    Don't configure field 1. If you need to parse secondary bitmap even if it's empty, then set the forceSecondaryBitmap flag in the message factory.

     

Log in to post a comment.