Paquetes genéricos en jPOS

jPOSPackage

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();

Tags: , , ,

Dejar una Respuesta

Spam Protection by WP-SpamFree

© 2009 Jotadeveloper Blog. Nuestros contenidos están bajo licencia Creative Commons mientras no se indique lo contrario,
y pueden reproducirse libremente sin más que mencionar la fuente ("JotaDeveloper") y la URL concreta del artículo original. .

This blog is powered by Wordpress and JotaDeveloperTheme.