From ef980daae83c308aa0705d1657635a46291c8e45 Mon Sep 17 00:00:00 2001 From: langella <langella@b8ef2a07-7df7-436f-90b9-41648038564b> Date: Wed, 13 Feb 2013 19:40:26 +0000 Subject: [PATCH] give line number on sax parse error git-svn-id: https://subversion.renater.fr/xtandempipeline/trunk@340 b8ef2a07-7df7-436f-90b9-41648038564b --- .../MsException/MyErrorHandler.java | 43 +++++++++++++++++ .../xtandempipeline/sax_parse/parse_file.java | 46 +++++++++---------- 2 files changed, 65 insertions(+), 24 deletions(-) create mode 100644 xtandempipeline/src/fr/inra/pappso/xtandempipeline/MsException/MyErrorHandler.java 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 000000000..04451ac29 --- /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 86919ba08..c54501928 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(); -- GitLab