diff --git a/xtandempipeline/src/fr/inra/pappso/xtandempipeline/MsException/MyErrorHandler.java b/xtandempipeline/src/fr/inra/pappso/xtandempipeline/MsException/MyErrorHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..04451ac298253c099e74a208df1b4272319c2ab2 --- /dev/null +++ b/xtandempipeline/src/fr/inra/pappso/xtandempipeline/MsException/MyErrorHandler.java @@ -0,0 +1,43 @@ +package fr.inra.pappso.xtandempipeline.MsException; + +import org.apache.log4j.Logger; +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +public class MyErrorHandler implements ErrorHandler { + private static final Logger logger = Logger.getLogger(MyErrorHandler.class); + + public void warning(SAXParseException exception) throws SAXException { + // Bring things to a crashing halt + logger.warn("**Parsing Warning**" + "\n\t Line: " + + exception.getLineNumber() + "\n\t URI: " + + exception.getSystemId() + "\n\t Message: " + + exception.getMessage()); + // throw new SAXException("Warning encountered"); + } + + public void error(SAXParseException exception) throws SAXException { + // Bring things to a crashing halt + logger.error("**Parsing Error**" + "\n\t Line: " + + exception.getLineNumber() + "\n\t URI: " + + exception.getSystemId() + "\n\t Message: " + + exception.getMessage()); + // throw new SAXException("Error encountered"); + } + + public void fatalError(SAXParseException exception) throws SAXException { + // Bring things to a crashing halt + logger.fatal("**Parsing Fatal Error**" + "\n\t Line: " + + exception.getLineNumber() + "\n\t URI: " + + exception.getSystemId() + "\n\t Message: " + + exception.getMessage()); + System.out.println("**Parsing Fatal Error**" + "\n\t Line: " + + exception.getLineNumber() + "\n\t URI: " + + exception.getSystemId() + "\n\t Message: " + + exception.getMessage()); + throw new SAXException("ERROR at line " + exception.getLineNumber() + + " column " + exception.getColumnNumber() + " : " + + exception.getMessage()); + } +} \ No newline at end of file diff --git a/xtandempipeline/src/fr/inra/pappso/xtandempipeline/sax_parse/parse_file.java b/xtandempipeline/src/fr/inra/pappso/xtandempipeline/sax_parse/parse_file.java index 86919ba08e582ebfb53e7b7476d666f9e95ca180..c54501928d031145a321b6c5e7f3097889901119 100644 --- a/xtandempipeline/src/fr/inra/pappso/xtandempipeline/sax_parse/parse_file.java +++ b/xtandempipeline/src/fr/inra/pappso/xtandempipeline/sax_parse/parse_file.java @@ -6,28 +6,23 @@ import java.io.InputStream; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; +import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.helpers.XMLReaderFactory; import org.apache.log4j.Logger; import org.apache.xerces.impl.io.MalformedByteSequenceException; +import fr.inra.moulon.utils.MyErrorHandler; import fr.inra.pappso.xtandempipeline.MsException.MSMSException; -import javax.xml.parsers.SAXParserFactory; -import javax.xml.parsers.SAXParser; - public class parse_file { private static final Logger logger = Logger.getLogger(parse_file.class); private DefaultHandler handler; - private SAXParserFactory factory; - - private SAXParser saxParser; - // private File file_to_parse; - public parse_file(DefaultHandler h, File f) - throws Exception { + public parse_file(DefaultHandler h, File f) throws Exception { logger.debug("parse_file begin"); // on recupere le handler et le fichier à parser this.handler = h; @@ -37,38 +32,38 @@ public class parse_file { throw new MSMSException("The file " + file_to_parse.getAbsolutePath() + " doesn't exist : no parsing possible"); - this.factory = SAXParserFactory.newInstance(); - this.saxParser = factory.newSAXParser(); try { InputStream inputStream = new FileInputStream(file_to_parse); InputSource is = new InputSource(inputStream); - this.saxParser.parse(is, this.handler); + XMLReader reader = XMLReaderFactory.createXMLReader(); + reader.setContentHandler(this.handler); + reader.setErrorHandler(new MyErrorHandler()); + reader.parse(is); } catch (MalformedByteSequenceException e) { try { logger.debug("Mauvais encodage"); InputStream inputStream = new FileInputStream(file_to_parse); InputSource is = new InputSource(inputStream); is.setEncoding("ISO-8859-1"); - this.saxParser.parse(is, this.handler); + XMLReader reader = XMLReaderFactory.createXMLReader(); + reader.setContentHandler(this.handler); + reader.setErrorHandler(new MyErrorHandler()); + reader.parse(is); } catch (Exception e2) { throw e2; } } catch (SAXException e) { - logger - .error("Problems to parse xml file" - + file_to_parse.getName()); + logger.error("Problems to parse xml file" + file_to_parse.getName()); logger.error(e.getMessage()); StackTraceElement[] f1 = e.getStackTrace(); for (int i = 0; i < f1.length; i++) { logger.error(f1[i]); } - throw new MSMSException(file_to_parse.getName() - + " is not a valid xml file:\n" + e.getMessage()); + throw new MSMSException("Problem parsing file " + + file_to_parse.getName() + " :\n" + e.getMessage()); } catch (Exception e) { - logger - .error("Problems to parse xml file" - + file_to_parse.getName()); + logger.error("Problems to parse xml file" + file_to_parse.getName()); logger.error(e.getMessage()); StackTraceElement[] f1 = e.getStackTrace(); for (int i = 0; i < f1.length; i++) { @@ -86,12 +81,15 @@ public class parse_file { throw new MSMSException("handler is null"); } this.handler = h; - this.factory = SAXParserFactory.newInstance(); - this.saxParser = factory.newSAXParser(); + + try { InputSource is = new InputSource(input); - this.saxParser.parse(is, this.handler); + XMLReader reader = XMLReaderFactory.createXMLReader(); + reader.setContentHandler(this.handler); + reader.setErrorHandler(new MyErrorHandler()); + reader.parse(is); } catch (SAXParseException eSax) { String message = "Error reading XML file : " + eSax.getCause().getMessage();