I want to validate an xml document with an existing schema. I know there is a code to do it when the schema is present as a URL. BUt in my case schema is present with in the application (since it is stored in the database) and that is not the url.
I have the following code:
public static void DOMValidate(String XMLfile, String Schema){
  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);
            // convert the xml file name to a URL
            String SystemId = null;
            try{
                SystemId = new File(Schema).toURL().toExternalForm();
            } catch(java.net.MalformedURLException ex){
                //ex.printStackTrace();
                log.error(ex);
            }
            parser.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",SystemId);
            // myErrorHandler is a descendant of ErrorHandler, it should be set here to be able to catch parse errors
            parser.setErrorHandler(new SchemaErrorHandler());
 
        } 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(new File(XMLfile).toURL().toExternalForm());
                //System.out.println("Parsed Successfully by DOM Parser");
        } catch (org.xml.sax.SAXException ex){
                //System.out.println("SAXException Exception");
                //ex.printStackTrace();
            log.error(ex);
        } catch (java.io.IOException ex){
                System.out.println("IOException Exception");
   } finally {
   long endTime = System.currentTimeMillis();
         //System.out.println("Total time of DOMValidate:"+(endTime-startTime));
 
 }
 
    }
 
How can I do the validation if the Schema is the actual schema string not the url. This looks like a common problem. I assume that its not universal that schema is not always stored externally.
 
Any suggestions are appreciated.
 
Praveen

Reply via email to