El empaquetado es una de las glorias de jPOS a mi parecer, hace un tiempo escribí como jPOS creaba el mapa de bits primario y sencudario. Mucha gente que inicia con jPOS cree (me incluyo yo en mis inicios) que nosotros debemos setear el campo primario y el campo secundario, pero que quede claro, esto no es necesario con jPOS. Por eso vamos hablar hoy del empaquetado y el desempaquetado en jPOS, los diferentes tipos de empaquetados que el frameworks nos ofrece y el Empaquetado Genérico, para crear el empaquetado a la medida.
Existen 2 maneras de crear un empaquetador, primero implementando el Interfaz ISOPackager que se encuentra en el paquete org.jpos.iso y heredando los métodos de ISOBasePackager que trae int unpack y byte[] pack. Existen muchas clases empaquetadoras en esta ubicación /org/jpos/iso/packager para diferentes tipos de protocolos de comunicación.
public interface ISOPackager extends LogSource { public byte[] pack (ISOComponent m) throws ISOException; public int unpack (ISOComponent m, byte[] b) throws ISOException; public void unpack (ISOComponent m, InputStream in) throws IOException, ISOException; public String getFieldDescription(ISOComponent m, int fldNumber); public ISOMsg createISOMsg (); }
La otra manera es crear un empaquetado genérico, que no es mas que crear una estructura en XML donde indicamos, el id, el largo del mensaje, el nombre, y el tipo de dato, en ese campo vamos agregar la clase del tipo de dato que nos ofrece jPOS.
<!DOCTYPE isopackager SYSTEM "genericpackager.dtd"> <!-- ISO 8583:1993 (BINARY) field descriptions for GenericPackager --> <isopackager> <isofield id="0" length="4" name="Message Type Indicator" pad="false" class="org.jpos.iso.IFB_NUMERIC"/> <isofield id="1" length="16" name="Bitmap" class="org.jpos.iso.IFB_BITMAP"/> ... ... ... <isofield id="128" length="8" name="Message authentication code field" class="org.jpos.iso.IFB_BINARY"/> </isopackager>
Si descargas jPOS, podrás encontrar listos y para su uso algunos ejemplos en la ubicación cfg/packager.
Nota: Debes tener en cuenta que el genericpackager.dtd y el generic-validating-packager.dtd deben estar en el mismo directorio y tener permisos de lectura (linux) para que el paquete genérico pueda leer la configuración creada por vos.
Una vez listo tenemos nuestro xml para el empaquetador genérico, que se adapte a nuestras necesidades solo agregamos el PATH como parametro del constructor de la clase GenericPackager y listo para usarse como en el siguiente ejemplo.
GenericPackager packager = new GenericPackager("miPaquetePersonalizado.xml");
Una vez cargada la configuración, ya podemos empaquetar y tendremos lista nuestra trama para enviarla por el socket. o si desempaquetamos, el canal que usemos se encargará de converir la trama en un objeto ISOMsg.
//Para reempaquetar iso.recalcBitMap(); //o usar los métodos para empaquetar iso.pack(); //o // Para desempaquetar iso.unpack();






Últimos comentarios