mardi 16 décembre 2008

Faire un appender suffixé par la date

Cette classe permet de faire un appender qui suffixe la date.
package myprog.util;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.FileAppender;

public class DateFileAppender extends FileAppender {

private String datePattern = "yyyyMMddhhmm";

public void setFile(String strFile) {
String strDate;
SimpleDateFormat sdf;

if (datePattern!=null && strFile!=null) {
sdf = new SimpleDateFormat(datePattern);
strDate = sdf.format(new Date());
fileName = strFile.replaceAll("%date%", strDate);
} else {
System.err.println("Either File or DatePattern options are not set for appender [" + name + "].");
}
}

public String getDatePattern() {
return datePattern;
}

public void setDatePattern(String datePattern) {
this.datePattern = datePattern;
}
}



Pour l'utiliser dans le fichier log4j

log4j.appender.F1=myprog.util.DateFileAppender
log4j.appender.F1.File=log/extract-generated-%date%.log
log4j.appender.F1.layout=org.apache.log4j.PatternLayout
log4j.appender.F1.layout.ConversionPattern=%m%n

vendredi 5 décembre 2008

Utiliser XStream rapidement


Méthodes importantes



Definir une classes



alias("MY_TABLE", MyType.class);


Definir un champ



aliasField("MY_TABLE", MyType.class, "fieldName");


Definir un attribut



aliasAttribute(MyType.class, "fieldName","attribute-name");


Ignorer des champs



omitField(CaptureSacapt.class, "mareeId");


Questions diverses



Utiliser un format de date compatible avec les XSD



registerConverter(new ISO8601DateConverter());


Il est nécessaire pour ceci d'ajouter à son fichier POM

<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>1.5.2</version>
</dependency>



Changer l'ordre des champs


La manière la plus simple de changer l'ordre d'apparition des balise dans le XML généré est tout simplement de changer l'ordre des champs à l'intérieur de la classe.

L'autre méthode consiste à se servir d'un trieur de champs.

SortableFieldKeySorter sorter = new SortableFieldKeySorter();
sorter.registerFieldOrder(MyType.class,
new String[] { "firstToSerialize",
"secondToSerialize",
"thirdToSerialize" }
);
xstream = new XStream(new Sun14ReflectionProvider(new FieldDictionary( sorter)));



Les éléments nuls


Il n'existe pas de manière simple de traiter les chaine vide comme des nulles. Il est nécessaire d'implémenter un convertisseur et de l'enregistrer.


Validation par XSD


Un XML est validé par XSD

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
spf.setValidating(true);
SAXParser sp = spf.newSAXParser();
sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
InputStream schemaIs = getClass().getResourceAsStream("/my-validator.xsd");
sp.setProperty(JAXP_SCHEMA_SOURCE, schemaIs);
XSDHandler handler = new XSDHandler();
sp.parse(file, handler);