You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by co...@apache.org on 2003/08/06 16:12:29 UTC

cvs commit: ant/src/main/org/apache/tools/ant/types XMLCatalog.java

conor       2003/08/06 07:12:29

  Modified:    src/main/org/apache/tools/ant/types XMLCatalog.java
  Log:
  Change the check for the external resolver catalog impl to
  ensure it can be loaded by the resolver classes.
  
  Revision  Changes    Path
  1.29      +36 -9     ant/src/main/org/apache/tools/ant/types/XMLCatalog.java
  
  Index: XMLCatalog.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/types/XMLCatalog.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -w -u -r1.28 -r1.29
  --- XMLCatalog.java	17 Jul 2003 15:44:43 -0000	1.28
  +++ XMLCatalog.java	6 Aug 2003 14:12:29 -0000	1.29
  @@ -188,6 +188,12 @@
       public static final String APACHE_RESOLVER
           = "org.apache.tools.ant.types.resolver.ApacheCatalogResolver";
   
  +    /**
  +     * Resolver base class
  +     */
  +    public static final String CATALOG_RESOLVER
  +        = "org.apache.xml.resolver.tools.CatalogResolver";
  +
       //-- Methods ---------------------------------------------------------------
   
       /**
  @@ -534,13 +540,34 @@
               loader = getProject().createClassLoader(Path.systemClasspath);
   
               try {
  -                Class clazz = loader.forceLoadSystemClass(APACHE_RESOLVER);
  +                Class clazz = Class.forName(CATALOG_RESOLVER, true, loader);
  +                Class clazz = Class.forName(APACHE_RESOLVER, true, loader);
  +
  +                // The Apache resolver is present - Need to check if it can
  +                // be seen by the catalog resolver class. Start by getting
  +                // the actual loader
  +                ClassLoader apacheResolverLoader = clazz.getClassLoader();
  +
  +                // load the base class through this loader.
  +                Class baseResolverClass
  +                    = Class.forName(CATALOG_RESOLVER, true, apacheResolverLoader);
  +
  +                // and find its actual loader
  +                ClassLoader baseResolverLoader
  +                    = baseResolverClass.getClassLoader();
  +
  +                // We have the loader which is being used to load the
  +                // CatalogResolver. Can it see the ApacheResolver? The
  +                // base resolver will only be able to create the ApacheResolver
  +                // if it can see it - doesn't use the context loader.
  +                clazz = Class.forName(APACHE_RESOLVER, true, baseResolverLoader);
  +
                   Object obj  = clazz.newInstance();
                   //
                   // Success!  The xml-commons resolver library is
                   // available, so use it.
                   //
  -                catalogResolver = new ApacheResolver(clazz, obj);
  +                catalogResolver = new ExternalResolver(clazz, obj);
               } catch (Throwable ex) {
                   //
                   // The xml-commons resolver library is not
  @@ -789,7 +816,7 @@
   
       /**
        * Interface implemented by both the InternalResolver strategy and
  -     * the ApacheResolver strategy.
  +     * the ExternalResolver strategy.
        */
       private interface CatalogResolver extends URIResolver, EntityResolver {
   
  @@ -894,13 +921,13 @@
       }
   
       /**
  -     * The ApacheResolver strategy is used if the Apache resolver
  +     * The ExternalResolver strategy is used if the Apache resolver
        * library (Norm Walsh's library from xml-commons) is available in
  -     * the classpath.  The ApacheResolver is a essentially a superset
  +     * the classpath.  The ExternalResolver is a essentially a superset
        * of the InternalResolver.
        *
        */
  -    private class ApacheResolver implements CatalogResolver {
  +    private class ExternalResolver implements CatalogResolver {
   
           private Method setXMLCatalog = null;
           private Method parseCatalog = null;
  @@ -912,7 +939,7 @@
   
           private boolean externalCatalogsProcessed = false;
   
  -        public ApacheResolver(Class resolverImplClass,
  +        public ExternalResolver(Class resolverImplClass,
                                 Object resolverImpl) {
   
               this.resolverImpl = resolverImpl;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org