mrglavas 2004/03/19 15:57:41 Modified: java/src/org/apache/xerces/util XMLCatalogResolver.java Log: Adding support for DOM L3 LSResourceResolvers. Revision Changes Path 1.4 +62 -4 xml-xerces/java/src/org/apache/xerces/util/XMLCatalogResolver.java Index: XMLCatalogResolver.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/util/XMLCatalogResolver.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- XMLCatalogResolver.java 24 Feb 2004 23:15:53 -0000 1.3 +++ XMLCatalogResolver.java 19 Mar 2004 23:57:41 -0000 1.4 @@ -22,8 +22,12 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import org.w3c.dom.ls.LSInput; +import org.w3c.dom.ls.LSResourceResolver; + import javax.xml.parsers.SAXParserFactory; +import org.apache.xerces.dom.DOMInputImpl; import org.apache.xerces.jaxp.SAXParserFactoryImpl; import org.apache.xerces.xni.XNIException; @@ -45,8 +49,9 @@ * OASIS XML Catalogs Specification</a>. It encapsulates the * <a href="http://xml.apache.org/commons/">XML Commons</a> resolver. * An instance of this class may be registered on the parser - * as a SAX entity resolver or as an XNI entity resolver by setting - * the property (http://apache.org/xml/properties/internal/entity-resolver).</p> + * as a SAX entity resolver, as a DOM LSResourceResolver or + * as an XNI entity resolver by setting the property + * (http://apache.org/xml/properties/internal/entity-resolver).</p> * * <p>It is intended that this class may be used standalone to perform * catalog resolution outside of a parsing context. It may be shared @@ -57,7 +62,7 @@ * @version $Id$ */ public class XMLCatalogResolver - implements XMLEntityResolver, EntityResolver { + implements XMLEntityResolver, EntityResolver, LSResourceResolver { /** Internal catalog manager for Apache catalogs. **/ private CatalogManager fResolverCatalogManager = null; @@ -241,6 +246,59 @@ InputSource source = new InputSource(resolvedId); source.setPublicId(publicId); return source; + } + return null; + } + + /** + * <p>Resolves a resource using the catalog. This method interprets that + * the namespace URI corresponds to uri entries in the catalog. + * Where both a namespace and an external identifier exist, the namespace + * takes precedence.</p> + * + * @param type The type of the resource being resolved. + * @param namespaceURI The namespace of the resource being resolved. + * @param publicId The public identifier of the external entity being + * referenced, or <code>null</code> if no public identifier was + * supplied or if the resource is not an entity. + * @param systemId The system identifier, a URI reference, of the + * external resource being referenced, or <code>null</code> if no + * system identifier was supplied. + * @param baseURI The absolute base URI of the resource being parsed, or + * <code>null</code> if there is no base URI. + */ + public LSInput resolveResource(String type, String namespaceURI, + String publicId, String systemId, String baseURI) { + + String resolvedId = null; + + try { + // The namespace is useful for resolving namespace aware + // grammars such as XML schema. Let it take precedence over + // the external identifier if one exists. + if (namespaceURI != null) { + resolvedId = resolveURI(namespaceURI); + } + + // Resolve against an external identifier if one exists. This + // is useful for resolving DTD external subsets and other + // external entities. For XML schemas if there was no namespace + // mapping we might be able to resolve a system identifier + // specified as a location hint. + if (resolvedId == null) { + if (publicId != null && systemId != null) { + resolvedId = resolvePublic(publicId, systemId); + } + else if (systemId != null) { + resolvedId = resolveSystem(systemId); + } + } + } + // Ignore IOException. It cannot be thrown from this method. + catch (IOException ex) {} + + if (resolvedId != null) { + return new DOMInputImpl(publicId, resolvedId, baseURI); } return null; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]