cvc-complex-type.3.2.2: Attribute xsi:schemaLocation is not allowed to appear in <people> in Java DOM

24,302

The problem is here:

<xs:schema xmlns:xs="http://www.w3c.org/2001/XMLSchema" .....>

and

<people
    xmlns="http://www.cmu.edu/ns/blank"
    xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"....>  

The problem is the c in the w3c.org. DOM parser expects it to be w3.org everywhere-- in the XML document, in the XML Schema Document, in the schemaLanguage and the schemaSource properties.

Share:
24,302
An SO User
Author by

An SO User

Updated on July 09, 2022

Comments

  • An SO User
    An SO User almost 2 years

    I am attempting to validate my XML using XSD in Java by using DOM validator.
    Although, manually, I know that the document is indeed valid, DOM validator shouts back at me and says:

    cvc-complex-type.3.2.2: Attribute <xsi:schemaLocation> is not allowed to appear in the element <people>  
    

    I have made sure that:
    setNamespaceAware() is set to true
    The schemaLanguage property was set before schemaSource
    schemaLanguage is set to http://ww.w3.org/2001/XMLSchema
    Both the XSD and XML are in the same folder as the .java and .class file

    SSCCE

    import org.xml.sax.*;
    import org.xml.sax.helpers.*;
    import javax.xml.parsers.*;
    
    public class DOMValidator {
        String xmlInstance = null;
        String xmlSchema = null;
    
    
        public static void main(String[] args){
            DOMValidator validator = new DOMValidator();
            validator.validateXML("student.xsd",
                                  "helloWorld.xml");
        }
    
        public void validateXML(String xsd,String xml){
            xmlSchema = xsd;
            xmlInstance = xml;
            beginValidation();
        }
    
        public void beginValidation(){
            try{
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                factory.setNamespaceAware(true);
                factory.setValidating(true);
    
                factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
                                     "http://www.w3.org/2001/XMLSchema");
                factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource",
                                     xmlSchema);
    
                ErrorHandler errorHandler = new ErrorHandler();
    
                DocumentBuilder builder = factory.newDocumentBuilder();
                builder.setErrorHandler(errorHandler);
                builder.parse(xmlInstance);
    
                if(errorHandler.errorOccured == true){
                    System.out.println("Document is Invalid.");
                    System.out.println(errorHandler.ex.getMessage());
                }else{
                    System.out.println("Doument is valid");
                }
    
            }catch(ParserConfigurationException e){
                e.printStackTrace();
            }catch(SAXException e){
                e.printStackTrace();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    
        private class ErrorHandler extends DefaultHandler{
            public SAXParseException ex = null;
            public boolean errorOccured = false;
    
            @Override public void error(SAXParseException ex){
                this.ex = ex;
                errorOccured = true;
            }
    
            @Override public void fatalError(SAXParseException ex){
                this.ex = ex;
                errorOccured = true;
            }
    
            @Override public void warning(SAXParseException ex){
                this.ex = ex;
                errorOccured = true;
            }
        }
    }  
    

    XSD

    <xs:schema xmlns:xs="http://www.w3c.org/2001/XMLSchema"
            xmlns="http://www.cmu.edu/ns/blank"
            targetNamespace="http://www.cmu.edu/ns/blank"
            elementFormDefault="qualified">  
    

    XML

    <people
        xmlns="http://www.cmu.edu/ns/blank"
        xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.cmu.edu/ns/blank student.xsd">  
    

    How do I resolve this?