You might also want to extend the XMLCatalogResolver and override its core resolveIdentifier() method. The base method won't make any distinction between your main schema document and the include and is probably always returning the URI entry from the catalog since the namespace is given higher precedence than the schema location.
Thanks. Michael Glavassevich XML Technologies and WAS Development IBM Toronto Lab E-mail: mrgla...@ca.ibm.com E-mail: mrgla...@apache.org Mark R Maxey <mark_r_ma...@raytheon.com> wrote on 02/03/2012 02:25:36 PM: > You might try reading this discussion on JAXP, XML Catalogs, and XSDs > . I don't know that this will solve your problem, but it seems related ... > > > Mark Maxey > Raytheon, Garland > 580/2/P22-1 > (972)205-5760 > mark_r_ma...@raytheon.com > > [image removed] "Ramirez, Paul M (388J)" ---02/03/2012 09:18:06 > AM---Hi All, I'm having an issue with XML catalogs and validating an > XML file based on lookups with URI e > > From: "Ramirez, Paul M (388J)" <paul.m.rami...@jpl.nasa.gov> > To: "j-users@xerces.apache.org" <j-users@xerces.apache.org> > Date: 02/03/2012 09:18 AM > Subject: XMLCatalogResolver Schema with Include > > > > Hi All, > > I'm having an issue with XML catalogs and validating an XML file > based on lookups with URI elements. I believe the issue is coming > down to resolving the include from one of my namespace schema. It > could be that I'm not setting something but I just can't seem to > figure it out. I believe the following example shows what I am > talking about. If anyone can test it out please let me know if you > are experiencing the same thing or know how or why it doesn't work. > As a side note this works within a editor like Oxygen and everythingresolves. > > foo.xsd: > > <?xml version="1.0" encoding="UTF-8"?> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault= > "qualified" targetNamespace="http://foo.jpl.nasa.gov/foo" xmlns:foo=" > http://foo.jpl.nasa.gov/foo"> > <xs:include schemaLocation="http://foo.jpl.nasa.gov/foo-include.xsd"/> > <xs:element name="first" type="xs:string"/> > <xs:complexType name="name"> > <xs:sequence> > <xs:element ref="foo:first"/> > <xs:element ref="foo:last"/> > </xs:sequence> > </xs:complexType> > <xs:element name="name" type="foo:name"/> > </xs:schema> > > foo.xsd-include.xsd: > > <?xml version="1.0" encoding="UTF-8"?> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault= > "qualified" targetNamespace="http://foo.jpl.nasa.gov/foo"> > <xs:element name="last" type="xs:string"/> > </xs:schema> > > catalog-foo.xml: > > <?xml version="1.0" encoding="UTF-8"?> > <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> > <!-- This is a sample --> > <uri name="http://foo.jpl.nasa.gov/foo" uri="file:///Users/pramirez/ > Desktop/catalog/foo.xsd"/> > <system systemId="http://foo.jpl.nasa.gov/foo-include.xsd" uri=" > file:///Users/pramirez/Desktop/catalog/includes/foo-include.xsd"/> > </catalog> > > name.xml (purposely with an error so I can see if validation is > occurring correctly): > > <?xml version="1.0" encoding="UTF-8"?> > <name xmlns="http://foo.jpl.nasa.gov/foo"> > <last></last> > <first></first> > </name> > > XMLTest.java: > > public class XMLTest { > public static void main(String[] args) throws Exception { > String[] catalogs = {args[0]}; > XMLCatalogResolver resolver = new XMLCatalogResolver(); > resolver.setCatalogList(catalogs); > > SchemaFactory sf = SchemaFactory.newInstance(XMLConstants. > W3C_XML_SCHEMA_NS_URI); > sf.setResourceResolver(resolver); > Schema s = sf.newSchema(); > Validator v = s.newValidator(); > v.setResourceResolver(resolver); > v.validate(new StreamSource(args[1])); > } > } > > The java program then is just called with the reference to the > catalog-foo.xml and name.xml and I receive the following error: > > Exception in thread "main" org.xml.sax.SAXParseException: src- > resolve: Cannot resolve the name 'foo:last' to a(n) 'element > declaration' component. > at > org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException > (Unknown Source) > at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source) > at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) > at org.apache.xerces.impl.xs.traversers.XSDHandler.reportSchemaError > (Unknown Source) > at org.apache.xerces.impl.xs.traversers.XSDHandler.reportSchemaError > (Unknown Source) > at org.apache.xerces.impl.xs.traversers.XSDHandler.getGlobalDecl > (Unknown Source) > at > org.apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseLocal > (Unknown Source) > at > org.apache.xerces.impl.xs.traversers.XSDHandler.traverseLocalElements > (Unknown Source) > at org.apache.xerces.impl.xs.traversers.XSDHandler.parseSchema(Unknown Source) > at org.apache.xerces.impl.xs.XMLSchemaLoader.loadSchema(Unknown Source) > at org.apache.xerces.impl.xs.XMLSchemaValidator.findSchemaGrammar > (Unknown Source) > at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement > (Unknown Source) > at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source) > at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement > (Unknown Source) > at org.apache.xerces.impl.XMLNSDocumentScannerImpl > $NSContentDispatcher.scanRootElementHook(Unknown Source) > at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl > $FragmentContentDispatcher.dispatch(Unknown Source) > at > org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument > (Unknown Source) > at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) > at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) > at org.apache.xerces.jaxp.validation.StreamValidatorHelper.validate > (Unknown Source) > at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source) > at javax.xml.validation.Validator.validate(Validator.java:127) > at gov.nasa.pds.tools.label.XMLTest.main(XMLTest.java:22) > > Now if I put the contents of foo-include.xsd into foo.xsd then > everything is fine and validation occurs correctly. Any ideas what I > am doing wrong. My understanding is the system entry in the catalog > would allow the include to resolve. > > Thanks, > Paul Ramirez