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