CastorHelper
CodeDevFrançais
Dans la série code à garder sous la main : Une classe pour travailler Castor
package com.ledruide.utils.xml;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;
import org.xml.sax.InputSource;
public class CastorHelper {
private CastorHelper() {}
private static final String ENCODING = "UTF-16";
/**
* Permet de creer un fichier contenant le XML genere
*
* @param monObjet la classe contenant les donnees a 'castoriser'
* @param mappingFile le fichier XML de mapping pour savoir quoi faire avec l'Objet
* @throws Exception si une erreur survient.
*/
public static String saveXMLFile( Object monObjet , String mappingFile ) throws Exception {
try {
StringWriter content = new StringWriter();
// First look into the classpath
InputStream is = CastorHelper.class.getResourceAsStream( mappingFile );
// If the input stream is not OK I look into the filesystem
if ( is == null ) {
is = new FileInputStream( mappingFile );
}
// Chargement du mapping
Mapping mapping = new Mapping();
mapping.loadMapping( new InputSource( is ) );
// Marshal l'object -> La transformation de Java en XML !
final Marshaller marshaller = new Marshaller( content );
marshaller.setValidation( false );
marshaller.setMapping( mapping );
marshaller.setEncoding( ENCODING );
marshaller.marshal( monObjet );
return content.toString();
}
catch ( Exception e ) {
throw e;
}
}
/**
* Permet de lire un fichier XML contenant les donnees
*
* @param aClasse la classe d'implémentation des donnees a 'decastoriser'
* @throws Exception si une erreur survient.
*/
public static void loadXMLFile( Object monObjet , String mappingFile , String xml ) throws Exception {
try {
// First llok into the classpath
InputStream is = CastorHelper.class.getResourceAsStream( mappingFile );
// If the input stream is not OK I look into the filesystem
if ( is == null ) {
is = new FileInputStream( mappingFile );
}
// Chargement du mapping
Mapping mapping = new Mapping();
mapping.loadMapping( new InputSource( is ) );
// UnMarshal l'object -> La transformation XML vers Java !
Unmarshaller unmarshaller = new Unmarshaller( monObjet );
unmarshaller.setWhitespacePreserve( true );
unmarshaller.setMapping( mapping );
monObjet = unmarshaller.unmarshal( new FileReader( xml ) );
}
catch ( Exception e ) {
throw e;
}
}
/**
* @param result
* @return
* @throws IOException
* @throws MarshalException
* @throws ValidationException
*/
public static String dynamicXmlFromObject( Object object ) throws Exception {
StringWriter content = new StringWriter();
final Marshaller marshaller = new Marshaller( content );
marshaller.setValidation( false );
marshaller.setEncoding( ENCODING );
marshaller.setSuppressXSIType(true);
marshaller.marshal( object );
return content.toString();
}
}