[ 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" > <!-- ROOT ELEMENT --> <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 docment. 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" > <!-- ROOT ELEMENT --> <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 docment. > 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" > > > <!-- ROOT ELEMENT --> > <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 docment. -- 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