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.
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><headertype="0200">ISO014000050</header><headertype="0210">ISO014000050</header><headertype="0220">ISO014000050</header><headertype="0230">ISO014000050</header><parsetype="0200"><fieldnum="1"type="BINARY"length="32"/><fieldnum="2"type="LLVAR"/><fieldnum="3"type="NUMERIC"length="6"/><fieldnum="4"type="AMOUNT"length="12"/><fieldnum="7"type="DATE10"/><fieldnum="11"type="NUMERIC"length="6"/><fieldnum="12"type="TIME"length="6"/><fieldnum="13"type="DATE4"/><fieldnum="17"type="DATE4"/><fieldnum="32"type="LLVAR"/><fieldnum="35"type="LLVAR"/><fieldnum="37"type="NUMERIC"length="12"/><fieldnum="38"type="NUMERIC"length="6"/><fieldnum="39"type="ALPHA"length="2"/><fieldnum="41"type="ALPHA"length="16"/><fieldnum="54"type="LLVAR"/><fieldnum="103"type="LLVAR"/></parse><parsetype="0210"ref="0200"/><parsetype="0220"ref="0200"/><parsetype="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í:
publicclassMainClass{privatestaticLoggerlogger=LoggerFactory.getLogger(MainClass.class);publicstaticvoidprint(IsoMessagem){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 = "ISO0140000500200F23880012A8000000400000002000000180000000031523151143000400000020000001127165806220000115806112711271110000000001370088010000013954185D00000000000000000090382012734000903820100118000000000000000211"; 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("Errorparsingtrace",e);}}publicstaticvoidmain(String[]args){MainClassmain=newMainClass();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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
Descompuesta esta trama quedaría de la siguiente manera
Mi archivo de configuración lo tengo de la siguiente manera:
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í:
Al correrlo me devuelve esta excepción:
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
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.