Hi All,
I'm having some trouble re-using an XMLReader that I am asking to validate some XML against a schema.
An example of the sort of code I'm using is as follows:
        //...
        XMLReader xmlReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
        xmlReader.setFeature("http://apache.org/xml/features/validation/schema", true);
        xmlReader.setFeature("http://xml.org/sax/features/validation", true);
        xmlReader.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation", "/com/iris/csl/service/services.xsd");
        EntityResolver resolver = new XmlElementUtil.JavaResourceEntityResolver(xmlReader.getClass().getClassLoader());
        xmlReader.setEntityResolver(resolver);
        ErrorHandler errorHandler = new XmlChecker.BasicErrorHandler();
        xmlReader.setErrorHandler(errorHandler);
        InputSource inputSource;
        System.out.println("parse one");
        inputSource = new InputSource(new StringReader("<CSLSystem/>"));
        xmlReader.parse(inputSource);
        System.out.println("parse two");
        inputSource = new InputSource(new StringReader("<CSLSystem/>"));
        xmlReader.parse(inputSource);
        //...
 
Interesting features of this code are:
1.  The XmlChecker.BasicErrorHandler simply prints errors/warnings/fatal to stdout
2.  I get different error messages from the two calls to xmlReader.parse:
    parse one
    org.xml.sax.SAXParseException: cvc-complex-type.2.4.b: The content of element 'CSLSystem' is not complete. One of '{"":type, "":configuration}' is expected.
    parse two
    org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'CSLSystem'.
3.  I have a custom entity resolver which is only called during the first call to parse.
4.  Is it conceivable that the problem might be in org.apache.xerces.impl.xs.XMLSchemaValidator.findSchemaGrammar?
    It appears to call XMLSchemaLoader.resolveDocument only the first time, yet it appears not to be able to find the schema declaration on subsequent calls...?
 
Thanks all,
Huw
 

Reply via email to