  | |  | XML validation using xml schema string | XML validation using xml schema string 2003-01-15 - By Praveen Peddi
Hi all, 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 memory (since it is stored in the database) and that is not the url or on the hard disk. I have the following method which validates only when the schema is present externally. Note that the argument Schema is a URL: 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 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=iso-8859-1"> <META content="MSHTML 6.00.2800.1106" name=GENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=#ffffff> <DIV><FONT face=Arial size=2> <DIV><FONT face=Arial size=2>Hi all,</FONT></DIV> <DIV><FONT face=Arial size=2>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 memory (since it is stored in the database) and that is not the url or on the hard disk.</FONT></DIV> <DIV><FONT face=Arial size=2>I have the following method which validates only when the schema is present externally. Note that the argument Schema is a URL:</FONT></DIV> <DIV><FONT face=Arial size=2>public static void DOMValidate(String XMLfile, String Schema){<BR> long startTime = System.currentTimeMillis(); </FONT></DIV> <DIV> </DIV> <DIV><FONT face=Arial size=2> // Instantiate the DOM parser.<BR> DOMParser parser = new DOMParser();</FONT></DIV> <DIV> </DIV> <DIV><FONT face=Arial size=2> // set the features<BR> try{<BR> parser.setFeature("<A href='http://xml.org/sax/features/namespaces",true'>http://xml.org/sax/features /namespaces",true</A>);<BR>   ; parser.setFeature("<A href="http://xml.org/sax/features/validation">http://xml.org/sax/features /validation</A>", true);<BR> parser.setFeature("<A href='http://apache.org/xml/features/validation/schema",true'>http://apache.org /xml/features/validation/schema",true</A>);<BR> parser.setFeature("<A href='http://apache.org/xml/features/validation/schema-full-checking",true' >http://apache.org/xml/features/validation/schema-full-checking",true</A>);<BR> // convert the xml file name to a URL<BR> String SystemId = null;<BR> try{<BR>   ; SystemId = new File(Schema).toURL().toExternalForm();<BR> } catch(java.net.MalformedURLException ex){<BR>   ; //ex.printStackTrace();<BR> log.error(ex);<BR> }<BR> parser.setProperty("<A href='http://apache.org/xml/properties/schema/external -noNamespaceSchemaLocation",SystemId'>http://apache.org/xml/properties/schema /external-noNamespaceSchemaLocation",SystemId</A>);<BR> // myErrorHandler is a descendant of ErrorHandler, it should be set here to be able to catch parse errors<BR> parser.setErrorHandler(new SchemaErrorHandler());</FONT></DIV> <DIV> </DIV> <DIV><FONT face=Arial size=2> } catch (SAXNotSupportedException ex){<BR> System.out.println("SAXNotSupportedException Exception");<BR> } catch (SAXNotRecognizedException ex){<BR>   ; System.out.println("SAXNotRecognizedException Exception");<BR> }</FONT></DIV> <DIV> </DIV> <DIV><FONT face=Arial size=2> // parse the xml file, the errorhandler class has callbacks,<BR> // so those will be called automatically there is a parse error<BR> try{<BR>   ; parser.parse(new File(XMLfile).toURL().toExternalForm());<BR>   ; //System.out.println("Parsed Successfully by DOM Parser");<BR> } catch (org.xml.sax.SAXException ex){<BR>   ; //System.out.println("SAXException Exception");<BR> //ex.printStackTrace();<BR> log.error(ex);<BR> } catch (java.io.IOException ex){<BR>   ; System.out.println("IOException Exception");<BR> } finally {<BR> long endTime = System.currentTimeMillis();<BR> //System.out.println("Total time of DOMValidate:"+(endTime-startTime));<BR> <BR> }</FONT></DIV> <DIV> </DIV> <DIV><FONT face=Arial size=2> }</FONT></DIV> <DIV><FONT face=Arial size=2></FONT> </DIV> <DIV><FONT face=Arial size=2>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.</FONT></DIV> <DIV><FONT face=Arial size=2></FONT> </DIV> <DIV><FONT face=Arial size=2>Any suggestions are appreciated.</FONT></DIV> <DIV><FONT face=Arial size=2></FONT> </DIV> <DIV><FONT face=Arial size=2>Praveen</FONT></DIV></FONT></DIV></BODY></HTML>
|
|
 |