11
Feb

Glassfish: Eliminar el aviso PWC4011….

Si tienes el fichero de log (server.log) del servidor de aplicaciones Glasssfish lleno de avisos como este:

Unable to set request character encoding to UTF-8 from context, because request parameters have already been read, or ServletRequest.getReader() has already been called

Esto es debido a que el contenedor web esta intentando poner una codificación a la request muy tarde en el ciclo de vida de la request. De momento no hay solución a este bug y lo que hay que hacer es ignorarlo. ¿Cómo? Pues muy facil, accediendo a la administración del Glassfish ir a Aplication Server -> Logging -> Log Levels y poner “SEVERE” al nivel de log de Web Container

confserver

free blog themes
02
Oct

Parseo de ficheros con longitud fija

Existen en Java muchos artículos sobre las últimas tecnologías y sobre complicadas librerías.  A veces nos dejamos llevar por las tendencías y utilizamos frameworks o librerías que para proporcionarnos una pequeña funcionalidad tienen una utilización muy complicada y suceptible a errores.

Hoy quiero hablar sobre una sencilla libreria que considero muy útil:  flatpack. Esta librería permite extraer información de ficheros planos donde la información viene separada por delimitadores o por una longitud fija. Tiene capacidad para manejar ficheros CSV, EXCEL CSV, etc…  En un fichero xml se proporciona de una manera sencilla y desacoplada del código el mapeo de datos.

EJEMPLO DE UTILIZACION

Nada mejor que un ejemplo para ver lo sencillo y facil que hace flatpack el parseo de fichero planos. Vamos a realizar el parseo de un fichero con estructura cabecera lineas muy común.

C0008382022092009053768  IPSUM                            FRANCISCO JAVIER PEREZ PEREZ
AVDA. GASPAR
L000100040000010012      RON BARCELO ANEJO 0.70        .    +00002+0000024
L000200040001510012      CUTTY SARK 0.70               .    +00003+0000036
C0008382122092009053768  LOREM                            FRANCISCO JAVIER PEREZ PEREZ Â
AVDA. GASPAR
L000100040003140006      GINEBRA MASTER'S 0,70         .    +00005+0000030
C0008382222092009053768  SIT AMED                         FRANCISCO JAVIER PEREZ PEREZ Â
AVDA. GASPAR
L000100040006010006      JACK DANIEL'S    0,70L        .    +00002+0000012   

Este es el fichero que deseamos procesar para ello genermos el siguiente xml:

<PZMAP>
    <RECORD id="cabecera" startPosition="1" endPosition="1" indicator="C">
    	<COLUMN name="cab" length="1" />
        <COLUMN name="ident" length="8" />
        <COLUMN name="fecha" length="8" />
	<COLUMN name="dataformat" length="6" />
	<COLUMN name="nombre" length="35" />
	<COLUMN name="nombreComercial" length="35" />
	<COLUMN name="direccion" length="35" />
	<COLUMN name="ciudad length="25" />
	<COLUMN name="zipcode" length="5" />
	<COLUMN name="comentario" length="60" />
	<COLUMN name="supedido" length="10" />
	<COLUMN name="fecha2" length="10" />
	<COLUMN name="flag" length="1" />
	<COLUMN name="identicket" length="13" />
    </RECORD>
	<COLUMN name="line" length="1" />
        <COLUMN name="lineNumber" length="4" />
	<COLUMN name="familia" length="4" />
	<COLUMN name="articulo" length="6" />
	<COLUMN name="formato" length="4" />
	<COLUMN name="tipoDoc" length="2" />
	<COLUMN name="param" length="4" />
	<COLUMN name="desArticulo" length="35" />
	<COLUMN name="sign" length="1" />
	<COLUMN name="cantidad" length="5" />
</PZMAP>

Nota: Es importe que el fichero xml vengan indicados todos los campos que pueden venir en  el fichero plano aunque después no los vayamos a procesar.

Ahora el código donde se ve los sencillo que es realmene parsear este fichero:

Parser pzparser = DefaultParserFactory.getInstance().newFixedLengthParser(fichero xml, fichero a procesar);

pzparser.setIgnoreParseWarnings(true);
pzparser.setIgnoreExtraColumns(true);
DataSet ds = pzparser.parse();

while(ds.next()){
try{
if (ds.isRecordID(“cabecera”)) {
ds.getString(“nombreComercial”);
…….
}
else {
String line = ds.getString(“line”);

if (StringUtils.isNotEmpty(line) && “L”.equals(line)){

ds.getString(“familia”);

………

}
}

INSTALACION

Se necesita los siguientes jars:

  • flatpack-3.1.1.jar
  • slf4j-api-1.5.8.jar
  • slf4j-log4j12-1.5.8.jar

Y ya podemos procesar nuestro fichero plano. Este es un pequeño ejemplo de las posibidades que nos ofrece flatpack en una tarea todavía muy común hoy en día…


free blog themes
23
Jul

Primera entrada en el blog

Prueba

free blog themes
free blog themes