XML validation using xml schema string 2003-01-22 - By Praveen Peddi
As you said I wrote an EntityResolver but it didn't work. Could you send me a sample code (just the validation code) if u already have one.
My validate method looks as follows:
public static void validateXmlAgainstLocalSchema(String XMLString, String schemaString) throws SAXException{ long startTime = System.currentTimeMillis(); System.out.println("Files: XML:" + XMLString + " XSD:" + schemaString); XMLReader parser = null; // Instantiate a parser try{ parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); } catch (org.xml.sax.SAXException ex){ System.out.println("SAXException Exception"); throw new SAXException("Error Obtaining the parser."); }
try{
// Register the error handler parser.setErrorHandler(new SchemaErrorHandler());
//parser.setFeature("http://apache.org/xml/features/continue-after-fatal-err or", true); // Turn on validation
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-che cking",true);
//parser.setProperty("http://apache.org/xml/properties/schema/external-noNam espaceSchemaLocation",Schema); parser.setEntityResolver(new SchemaEntityResolver(schemaString));
} catch (org.xml.sax.SAXNotRecognizedException ex){ ex.printStackTrace(); System.out.println("SAXNotRecognizedException Exception"); } catch (org.xml.sax.SAXNotSupportedException ex){ ex.printStackTrace(); System.out.println("SAXNotSupportedException Exception"); }
// Parse the document try{ //String XMLSystemId = new File(XMLString).toURL().toExternalForm(); parser.parse(new InputSource(new StringReader(XMLString))); //parser.parse(XMLSystemId); System.out.println("Parsed Successfully by SAX Parser"); } catch (org.xml.sax.SAXException ex){ System.out.println("SAXException Exception"); throw new SAXException("Error Validating the content XML."); } catch (java.io.IOException ex){ System.out.println("IOException Exception"); throw new SAXException("Error Validating the content XML."); } finally { long endTime = System.currentTimeMillis(); System.out.println("Total time of SAXValidate:"+(endTime-startTime)); } }//SAXValidate
And SchemaEntityResolver looks as follows:
public class SchemaEntityResolver implements EntityResolver { InputSource source = null; public SchemaEntityResolver(String schemaString) { source = new InputSource(new StringReader(schemaString)); }
public InputSource resolveEntity(String publicID, String systemID) throws SAXException { return source; } }
When I try to validate an xml with the schema string, I get the following error: Line: 1 URI: null Message: cvc-elt.1: Cannot find the declaration of element 'content'.
Am I doing it wrong? If so please tell me how to use the entityresolver.
Praveen
----- Original Message ----- From: <sandygao@(protected)> To: <xerces-j-user@(protected)> Sent: Monday, January 20, 2003 10:18 AM Subject: Re: XML validation using xml schema string
> Write an entity resolver > (http://xml.apache.org/xerces2-j/javadocs/api/org/xml/sax/EntityResolver.htm l), > > and returned an input source with a StringReader when the schema document > is asked. > > HTH, > Sandy Gao > Software Developer, IBM Canada > (1-905) 413-3255 > sandygao@(protected) > > > > > "Praveen Peddi" > <ppeddi@(protected) To: <xerces-j-user@(protected)> > dia.com> cc: > Subject: Re: XML validation using xml schema string > 01/20/2003 09:16 > AM > Please respond to > xerces-j-user > > > > > > Hi all, > Last week I sent an email regarding the xml validation against the schema, > but didn't get any reply. Please reply if any one has answer to my > question. Is it possible to validate an xml document using a schema > document (not the schema url) that is present with in the application. If > its not possible, whats the best way of achieving it. Please read my > previous email below. > > Thanks > Praveen > > 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 > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: xerces-j-user-unsubscribe@(protected) > For additional commands, e-mail: xerces-j-user-help@(protected) > >
--------------------------------------------------------------------- To unsubscribe, e-mail: xerces-j-user-unsubscribe@(protected) For additional commands, e-mail: xerces-j-user-help@(protected)
|
|