[ 
https://issues.apache.org/jira/browse/XERCESJ-1739?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yasir Bajwa updated XERCESJ-1739:
---------------------------------
    Description: 
setEntityResolver on SAXParser is not being called to resolve 
xsi:schemaLocation.

Example:

{{    class DummyResolver implements EntityResolver {}}

{{        @Override}}
        public InputSource resolveEntity(String publicId, String systemId) 
throws SAXException }}{{{
}}{{            throw new SAXException("Access denied.");             
        }
}}{{    }    }}

{{    // main()}}

{{    // Path schemaPath ...}}
{{    // Path dataPath ...}}

{{    SchemaFactory schemaFactory = SchemaFactory.newInstance(}}
{{            "http://www.w3.org/XML/XMLSchema/v1.1";);}}

{{    StreamSource schemaSource = new StreamSource(schemaPath.toFile());}}
{{    Schema schema = schemaFactory.newSchema(schemaSource);}}

{{    SAXParserFactory spf = SAXParserFactory.newInstance();}}
{{    spf.setSchema(schema);}}
{{    spf.setNamespaceAware(true);}}
{{    SAXParser sp = spf.newSAXParser();}}
{{    }}
{{    XMLReader parser = sp.getXMLReader();}}
{{    //parser.setErrorHandler(new SAXErrorHandler());}}
{{    //parser.setContentHandler(new TestHandler());}}
{{    parser.setEntityResolver( new DummyResolver());}}
{{    InputSource is = new InputSource(new 
FileInputStream(dataPath.toFile()));}}
{{    parser.parse(is);}}

 

Schema (i.e. the file 'schemaPath' variable references in the code above):

{{<?xml version="1.0" encoding="UTF-8" ?>}}
{{{}<xs:schema }}\{{{}xmlns:xs="http://www.w3.org/2001/XMLSchema"{}}}{\{{}>
{}}}{{    <xs:element name="SiebelMessage">}}
{{        <xs:complexType>}}
{{            <xs:sequence>}}
{{                <xs:element name="CaseNum" maxOccurs="7" type="xs:string" />}}
{{                <xs:any minOccurs="0" />}}
{{            </xs:sequence>}}
{{        </xs:complexType>}}
{\{{}    </xs:element>
{}}}{{{}</xs:schema>{}}}

 

fod.xsd:

{{<?xml version="1.0" encoding="UTF-8" ?>}}
{{<xs:schema }}
{{    xmlns:xs="http://www.w3.org/2001/XMLSchema"}}
{{    xmlns="http://intra.tpon.gov.on.ca/fod"}}
{{    targetNamespace="http://intra.tpon.gov.on.ca/fod"}}
{{>}}
{{    <xs:element name="testElement" type="xs:integer" />}}

{{</xs:schema>}}

 

Instance:

{{<?xml version="1.0" encoding="UTF-8" ?>}}

{{<SiebelMessage }}
{{    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"}}
{{    xmlns:fod="http://intra.fod.gov.on.ca"}}
{{    xsi:schemaLocation="http://intra.fod.gov.on.ca fod.xsd"}}
{{>}}

{{    <CaseNum>1234</CaseNum>}}
{{    <CaseNum>1234</CaseNum>}}
{{    <CaseNum>1234</CaseNum>}}
{{    <fod:testElement>123</fod:testElement>}}
{{</SiebelMessage>}}

 

Result:

Exception in thread "main" org.xml.sax.SAXException: Error: 
URI=[file:///C:/tpon/fod/schema/xerces_tests/test1/input.xml] Line=12: 
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can 
be found for element 'fod:testElement'.

Expected result was for xsi:schemaLocation to try resolve the fod namespace and 
call entity resolver to get the fod.xsd schema document.

  was:
setEntityResolver on SAXParser is not being called to resolve 
xsi:schemaLocation.

Example:

{{    class DummyResolver implements EntityResolver {}}

{{        @Override}}
{{        public InputSource resolveEntity(String publicId, String systemId) 
throws SAXException }}{{{
}}{{            throw new SAXException("Access denied.");             
        }
}}{{    }    }}

{{    // main()}}

{{    // Path schemaPath ...}}
{{    // Path dataPath ...}}

{{    SchemaFactory schemaFactory = SchemaFactory.newInstance(}}
{{            "http://www.w3.org/XML/XMLSchema/v1.1";);}}

{{    StreamSource schemaSource = new StreamSource(schemaPath.toFile());}}
{{    Schema schema = schemaFactory.newSchema(schemaSource);}}

{{    SAXParserFactory spf = SAXParserFactory.newInstance();}}
{{    spf.setSchema(schema);}}
{{    spf.setNamespaceAware(true);}}
{{    SAXParser sp = spf.newSAXParser();}}
{{    }}
{{    XMLReader parser = sp.getXMLReader();}}
{{    //parser.setErrorHandler(new SAXErrorHandler());}}
{{    //parser.setContentHandler(new TestHandler());}}
{{    parser.setEntityResolver( new DummyResolver());}}
{{    InputSource is = new InputSource(new 
FileInputStream(dataPath.toFile()));}}
{{    parser.parse(is);}}

 

Schema (i.e. the file 'schemaPath' variable references in the code above):

{{<?xml version="1.0" encoding="UTF-8" ?>}}
{{<xs:schema }}{{{}xmlns:xs="http://www.w3.org/2001/XMLSchema"{}}}{{{}>
{}}}{{    <xs:element name="SiebelMessage">}}
{{        <xs:complexType>}}
{{            <xs:sequence>}}
{{                <xs:element name="CaseNum" maxOccurs="7" type="xs:string" />}}
{{                <xs:any minOccurs="0" />}}
{{            </xs:sequence>}}
{{        </xs:complexType>}}
{{{}    </xs:element>
{}}}{{{}</xs:schema>{}}}

 

fod.xsd:

{{<?xml version="1.0" encoding="UTF-8" ?>}}
{{<xs:schema }}
{{    xmlns:xs="http://www.w3.org/2001/XMLSchema"}}
{{    xmlns="http://intra.tpon.gov.on.ca/fod"}}
{{    targetNamespace="http://intra.tpon.gov.on.ca/fod"}}
{{>}}
{{    <xs:element name="testElement" type="xs:integer" />}}

{{</xs:schema>}}

 

Instance:

{{<?xml version="1.0" encoding="UTF-8" ?>}}

{{<SiebelMessage }}
{{    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"}}
{{    xmlns:fod="http://intra.fod.gov.on.ca"}}
{{    xsi:schemaLocation="http://intra.fod.gov.on.ca fod.xsd"}}
{{>}}

{{    <CaseNum>1234</CaseNum>}}
{{    <CaseNum>1234</CaseNum>}}
{{    <CaseNum>1234</CaseNum>}}
{{    <fod:testElement>123</fod:testElement>}}
{{</SiebelMessage>}}

 

Result:

Exception in thread "main" org.xml.sax.SAXException: Error: 
URI=[file:///C:/tpon/fod/schema/xerces_tests/test1/input.xml] Line=12: 
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can 
be found for element 'fod:testElement'.

Expected result was for xsi:schemaLocation to try resolve the fod namespace and 
call entity resolver to get the fod.xsd schema document.


> EntityResolver is not invoked for xsi:schemaLocation attribute
> --------------------------------------------------------------
>
>                 Key: XERCESJ-1739
>                 URL: https://issues.apache.org/jira/browse/XERCESJ-1739
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: JAXP (javax.xml.validation)
>    Affects Versions: 2.12.1
>            Reporter: Yasir Bajwa
>            Priority: Minor
>
> setEntityResolver on SAXParser is not being called to resolve 
> xsi:schemaLocation.
> Example:
> {{    class DummyResolver implements EntityResolver {}}
> {{        @Override}}
>         public InputSource resolveEntity(String publicId, String systemId) 
> throws SAXException }}{{{
> }}{{            throw new SAXException("Access denied.");             
>         }
> }}{{    }    }}
> {{    // main()}}
> {{    // Path schemaPath ...}}
> {{    // Path dataPath ...}}
> {{    SchemaFactory schemaFactory = SchemaFactory.newInstance(}}
> {{            "http://www.w3.org/XML/XMLSchema/v1.1";);}}
> {{    StreamSource schemaSource = new StreamSource(schemaPath.toFile());}}
> {{    Schema schema = schemaFactory.newSchema(schemaSource);}}
> {{    SAXParserFactory spf = SAXParserFactory.newInstance();}}
> {{    spf.setSchema(schema);}}
> {{    spf.setNamespaceAware(true);}}
> {{    SAXParser sp = spf.newSAXParser();}}
> {{    }}
> {{    XMLReader parser = sp.getXMLReader();}}
> {{    //parser.setErrorHandler(new SAXErrorHandler());}}
> {{    //parser.setContentHandler(new TestHandler());}}
> {{    parser.setEntityResolver( new DummyResolver());}}
> {{    InputSource is = new InputSource(new 
> FileInputStream(dataPath.toFile()));}}
> {{    parser.parse(is);}}
>  
> Schema (i.e. the file 'schemaPath' variable references in the code above):
> {{<?xml version="1.0" encoding="UTF-8" ?>}}
> {{{}<xs:schema }}\{{{}xmlns:xs="http://www.w3.org/2001/XMLSchema"{}}}{\{{}>
> {}}}{{    <xs:element name="SiebelMessage">}}
> {{        <xs:complexType>}}
> {{            <xs:sequence>}}
> {{                <xs:element name="CaseNum" maxOccurs="7" type="xs:string" 
> />}}
> {{                <xs:any minOccurs="0" />}}
> {{            </xs:sequence>}}
> {{        </xs:complexType>}}
> {\{{}    </xs:element>
> {}}}{{{}</xs:schema>{}}}
>  
> fod.xsd:
> {{<?xml version="1.0" encoding="UTF-8" ?>}}
> {{<xs:schema }}
> {{    xmlns:xs="http://www.w3.org/2001/XMLSchema"}}
> {{    xmlns="http://intra.tpon.gov.on.ca/fod"}}
> {{    targetNamespace="http://intra.tpon.gov.on.ca/fod"}}
> {{>}}
> {{    <xs:element name="testElement" type="xs:integer" />}}
> {{</xs:schema>}}
>  
> Instance:
> {{<?xml version="1.0" encoding="UTF-8" ?>}}
> {{<SiebelMessage }}
> {{    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"}}
> {{    xmlns:fod="http://intra.fod.gov.on.ca"}}
> {{    xsi:schemaLocation="http://intra.fod.gov.on.ca fod.xsd"}}
> {{>}}
> {{    <CaseNum>1234</CaseNum>}}
> {{    <CaseNum>1234</CaseNum>}}
> {{    <CaseNum>1234</CaseNum>}}
> {{    <fod:testElement>123</fod:testElement>}}
> {{</SiebelMessage>}}
>  
> Result:
> Exception in thread "main" org.xml.sax.SAXException: Error: 
> URI=[file:///C:/tpon/fod/schema/xerces_tests/test1/input.xml] Line=12: 
> cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration 
> can be found for element 'fod:testElement'.
> Expected result was for xsi:schemaLocation to try resolve the fod namespace 
> and call entity resolver to get the fod.xsd schema document.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscr...@xerces.apache.org
For additional commands, e-mail: j-dev-h...@xerces.apache.org

Reply via email to