vineet,

Unfortunately it's not possible to find all fatal errors in one pass. Any
parser that conforms to the W3C XML specification will not continue after
the first well-formedness error is found. This is because you cannot create
a XML parser that can reliably find all the errors in the XML document. XML
files can become wildly non-conformant after the first error is encountered.

It was decided early on in XML standarization that the standard would not be
cluttered with complicated ways for parsers to guess how the document is
supposed to be formed and thus try to glean what's wrong with the document
as a whole.

Check out this page for a simple explanation:
http://www.w3schools.com/dom/dom_validate.asp

Ian

28 May 2007 04:40:32 -0000, vineet rajput <[EMAIL PROTECTED]>:

Hi mukul and Michael,

sorry for this communication gap i was on vacation.well thanks for your
time and reply...but problem is; In our system we need to capture all th
well formed errors in one go. getting one fatal error is not acceptable as
per our requirement.



it will be a great help if you can let me know where i am doing wrong for
this (need urgent solution) or atleast let me know where can i find
solution.


The (relevant portion of the) XML document follows:(with two well formed
errors)***************
<?xml version="1.0" encoding="UTF-8"?>
<rootDirMapping>
    <rootDir>AppData</rootDir>
    <mappingFile>MappingFiles</mappingFile>
    <schemaFile>SchemaFiles<schemaFile>
    <validationHierarchy>1hierarchy<validationHierarchy>
    <database>database</database>
</rootDirMapping>
The (relevant portion of the) XML schema follows:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema
">
    <xs:element name="rootDirMapping">
          <xs:complexType>
              <xs:sequence>
                    <xs:element name="rootDir" type="xs:string" />
                    <xs:element name="mappingFile" type="xs:string" />
                    <xs:element name="schemaFile" type="xs:string" />
                    <xs:element name="validationHierarchy"
type="xs:string" />
                    <xs:element name="database" type="xs:string" />
              </xs:sequence>
          </xs:complexType>
    </xs:element>
</xs:schema>
*************************************************************
The (relevant portion of the) Java Code follows:
public static boolean validateWithSchema(String XMLFile, String Schema){
          boolean result = true;
          long startTime = System.currentTimeMillis();
          // Instantiate the DOM parser.
          DOMParser parser = new DOMParser();
          // set the features
          try{
          parser.setFeature("http://xml.org/sax/features/namespaces
",true);
          parser.setFeature("http://xml.org/sax/features/validation
",true);
          parser.setFeature("
http://apache.org/xml/features/validation/schema",true);
          parser.setFeature("
http://apache.org/xml/features/validation/schema-full-checking",true);
          parser.setFeature("
http://apache.org/xml/features/continue-after-fatal-error";, true);
          parser.setProperty("
http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation
",Schema);
          // myErrorHandler is a descendant of ErrorHandler, it should be
set here to be able to catch parse errors
          forgivingErrorHandler hndl = new forgivingErrorHandler();
          parser.setErrorHandler(hndl);
          } catch (SAXNotSupportedException ex){
                System.out.println("SAXNotSupportedException Exception");
          } catch (SAXNotRecognizedException ex){
                System.out.println("SAXNotRecognizedException Exception");
          }
          // parse the xml file, the errorhandler class has callbacks,
          // so those will be called automatically there is a parse error
          try{
                parser.parse(XMLFile);
              //System.out.println("Parsed Successfully by DOM Parser");
          } catch (org.xml.sax.SAXException ex){
                System.out.println("SAXException Exception");
              ex.printStackTrace();
          } catch (java.io.IOException ex){
                System.out.println("IOException Exception");
          }
          return result;
          }
The (relevant portion of the) Java Code for Error Handler follows:
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class forgivingErrorHandler implements org.xml.sax.ErrorHandler {

    public forgivingErrorHandler() {}
    public void error(org.xml.sax.SAXParseException err) throws
SAXException {
          FileWriter fstream;
          try {
              String
fs="D:\\WORKSPACE\\xmlValidation\\ExceptionLogs\\Errors.txt";
              fstream = new FileWriter(fs,true);
              PrintWriter out = new PrintWriter(fstream);
              out.write("Exception
at:"+err.getLineNumber()+"***"+err.getMessage()+"\n\n\n");
              out.close();
          } catch (IOException e) {
              e.printStackTrace();
          }

    }

    public void fatalError(org.xml.sax.SAXParseException fe) throws
SAXException {
          FileWriter fstream;
          try {
              String
fs="D:\\WORKSPACE\\xmlValidation\\ExceptionLogs\\FatalErrors.txt";
              fstream = new FileWriter(fs,true);
              PrintWriter out = new PrintWriter(fstream);
              out.write("Exception
at:"+fe.getLineNumber()+"***"+fe.getMessage()+"\n\n\n");
              out.close();
          } catch (IOException e) {
              e.printStackTrace();
          }

    }

    public void warning(org.xml.sax.SAXParseException war) throws
SAXException {
          FileWriter fstream;
          try {
              fstream = new
FileWriter("D:\\WORKSPACE\\xmlValidation\\ExceptionLogs\\Warnings.txt",true);
              PrintWriter out = new PrintWriter(fstream);
              out.write("Exception
at:"+war.getLineNumber()+"***"+war.getMessage()+"\n\n\n");
              out.close();
          } catch (IOException e) {
              System.out.println("Here are we in the Warning
section....");
              e.printStackTrace();
          }

    }


}

I have put xml-apis.jar, xercesImpl.jar, serializer.jar, resolver.jar at
build path.

Unfortunately, when I try to validate the above XML document against the
Schema, it throws errors as I explained above… only one fatal error.
Errors that I got*****************************
Exception at:8***The element type "validationHierarchy" must be terminated
by the matching end-tag "</validationHierarchy>".

Exception at:8***The end-tag for element type "validationHierarchy" must
end with a '>' delimiter.

Exception at:9***XML document structures must start and end within the
same entity.

Exception at:-1***Premature end of file.
*************************

it will be a great help if you can let me know where i am doing wrong for
this (need urgent solution) or atleast let me know where can i find
solution.

Thanks
Vineet Rajput
Software Engineer
Snap-On Business Solution
Logix Techno Park,
Noida,INDIA














[image: Best of 
Fares]<http://adworks.rediff.com/cgi-bin/AdWorks/click.cgi/www.rediff.com/signature-home.htm/[EMAIL
 PROTECTED]/1190170_1184066/1189298/1?PARTNER=3&OAS_QUERY=null+target=new+>




--
Ian Lewis
[EMAIL PROTECTED]
http://www.ianlewis.org/
http://jsxe.sourceforge.net

Reply via email to