jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java
changeset 10694 cf59e2badd14
parent 1337 e8d6cef36199
child 18240 cda839ac048f
equal deleted inserted replaced
10693:6e9ebed2e783 10694:cf59e2badd14
    54 
    54 
    55    /** Field _alreadyInitialized */
    55    /** Field _alreadyInitialized */
    56    static boolean _alreadyInitialized = false;
    56    static boolean _alreadyInitialized = false;
    57 
    57 
    58    /** these are the system-wide resolvers */
    58    /** these are the system-wide resolvers */
    59    static List _resolverVector = null;
    59    static List<ResourceResolver> _resolverVector = null;
    60 
    60 
    61    static boolean allThreadSafeInList=true;
    61    static boolean allThreadSafeInList=true;
    62 
    62 
    63    /** Field transformSpi */
    63    /** Field transformSpi */
    64    protected ResourceResolverSpi _resolverSpi = null;
    64    protected ResourceResolverSpi _resolverSpi = null;
   100    public static final ResourceResolver getInstance(Attr uri, String BaseURI)
   100    public static final ResourceResolver getInstance(Attr uri, String BaseURI)
   101            throws ResourceResolverException {
   101            throws ResourceResolverException {
   102       int length=ResourceResolver._resolverVector.size();
   102       int length=ResourceResolver._resolverVector.size();
   103       for (int i = 0; i < length; i++) {
   103       for (int i = 0; i < length; i++) {
   104                   ResourceResolver resolver =
   104                   ResourceResolver resolver =
   105             (ResourceResolver) ResourceResolver._resolverVector.get(i);
   105             ResourceResolver._resolverVector.get(i);
   106                   ResourceResolver resolverTmp=null;
   106                   ResourceResolver resolverTmp=null;
   107                   try {
   107                   try {
   108                         resolverTmp =  allThreadSafeInList || resolver._resolverSpi.engineIsThreadSafe() ? resolver :
   108                         resolverTmp =  allThreadSafeInList || resolver._resolverSpi.engineIsThreadSafe() ? resolver :
   109                                         new ResourceResolver((ResourceResolverSpi)resolver._resolverSpi.getClass().newInstance());
   109                                         new ResourceResolver((ResourceResolverSpi)resolver._resolverSpi.getClass().newInstance());
   110                   } catch (InstantiationException e) {
   110                   } catch (InstantiationException e) {
   118 
   118 
   119          if ((resolver != null) && resolverTmp.canResolve(uri, BaseURI)) {
   119          if ((resolver != null) && resolverTmp.canResolve(uri, BaseURI)) {
   120                  if (i!=0) {
   120                  if (i!=0) {
   121                  //update resolver.
   121                  //update resolver.
   122                          //System.out.println("Swaping");
   122                          //System.out.println("Swaping");
   123                          List resolverVector=(List)((ArrayList)_resolverVector).clone();
   123                          List<ResourceResolver> resolverVector=getResolverVectorClone();
   124                          resolverVector.remove(i);
   124                          resolverVector.remove(i);
   125                          resolverVector.add(0,resolver);
   125                          resolverVector.add(0,resolver);
   126                          _resolverVector=resolverVector;
   126                          _resolverVector=resolverVector;
   127                  } else {
   127                  } else {
   128                          //System.out.println("hitting");
   128                          //System.out.println("hitting");
   137                            : "null"), BaseURI };
   137                            : "null"), BaseURI };
   138 
   138 
   139       throw new ResourceResolverException("utils.resolver.noClass", exArgs,
   139       throw new ResourceResolverException("utils.resolver.noClass", exArgs,
   140                                           uri, BaseURI);
   140                                           uri, BaseURI);
   141    }
   141    }
       
   142 
       
   143    /**
       
   144     * Method getResolverVectorClone
       
   145     *
       
   146     * @return clone of _resolverVector
       
   147     */
       
   148    @SuppressWarnings("unchecked")
       
   149    private static List<ResourceResolver> getResolverVectorClone() {
       
   150        return (List<ResourceResolver>)((ArrayList<ResourceResolver>)_resolverVector).clone();
       
   151    }
       
   152 
   142    /**
   153    /**
   143     * Method getInstance
   154     * Method getInstance
   144     *
   155     *
   145     * @param uri
   156     * @param uri
   146     * @param BaseURI
   157     * @param BaseURI
   148     * @return the instance
   159     * @return the instance
   149     *
   160     *
   150     * @throws ResourceResolverException
   161     * @throws ResourceResolverException
   151     */
   162     */
   152    public static final ResourceResolver getInstance(
   163    public static final ResourceResolver getInstance(
   153            Attr uri, String BaseURI, List individualResolvers)
   164            Attr uri, String BaseURI, List<ResourceResolver> individualResolvers)
   154               throws ResourceResolverException {
   165               throws ResourceResolverException {
   155       if (log.isLoggable(java.util.logging.Level.FINE)) {
   166       if (log.isLoggable(java.util.logging.Level.FINE)) {
   156 
   167 
   157         log.log(java.util.logging.Level.FINE, "I was asked to create a ResourceResolver and got " + (individualResolvers==null? 0 : individualResolvers.size()) );
   168         log.log(java.util.logging.Level.FINE, "I was asked to create a ResourceResolver and got " + (individualResolvers==null? 0 : individualResolvers.size()) );
   158         log.log(java.util.logging.Level.FINE, " extra resolvers to my existing " + ResourceResolver._resolverVector.size() + " system-wide resolvers");
   169         log.log(java.util.logging.Level.FINE, " extra resolvers to my existing " + ResourceResolver._resolverVector.size() + " system-wide resolvers");
   161       // first check the individual Resolvers
   172       // first check the individual Resolvers
   162           int size=0;
   173           int size=0;
   163       if ((individualResolvers != null) && ((size=individualResolvers.size()) > 0)) {
   174       if ((individualResolvers != null) && ((size=individualResolvers.size()) > 0)) {
   164          for (int i = 0; i < size; i++) {
   175          for (int i = 0; i < size; i++) {
   165             ResourceResolver resolver =
   176             ResourceResolver resolver =
   166                (ResourceResolver) individualResolvers.get(i);
   177                individualResolvers.get(i);
   167 
   178 
   168             if (resolver != null) {
   179             if (resolver != null) {
   169                String currentClass = resolver._resolverSpi.getClass().getName();
   180                String currentClass = resolver._resolverSpi.getClass().getName();
   170                if (log.isLoggable(java.util.logging.Level.FINE))
   181                if (log.isLoggable(java.util.logging.Level.FINE))
   171                 log.log(java.util.logging.Level.FINE, "check resolvability by class " + currentClass);
   182                 log.log(java.util.logging.Level.FINE, "check resolvability by class " + currentClass);
   184     * The init() function is called by com.sun.org.apache.xml.internal.security.Init.init()
   195     * The init() function is called by com.sun.org.apache.xml.internal.security.Init.init()
   185     */
   196     */
   186    public static void init() {
   197    public static void init() {
   187 
   198 
   188       if (!ResourceResolver._alreadyInitialized) {
   199       if (!ResourceResolver._alreadyInitialized) {
   189          ResourceResolver._resolverVector = new ArrayList(10);
   200          ResourceResolver._resolverVector = new ArrayList<ResourceResolver>(10);
   190          _alreadyInitialized = true;
   201          _alreadyInitialized = true;
   191       }
   202       }
   192    }
   203    }
   193 
   204 
   194     /**
   205     /**
   286    /**
   297    /**
   287     * Method addProperties
   298     * Method addProperties
   288     *
   299     *
   289     * @param properties
   300     * @param properties
   290     */
   301     */
   291    public void addProperties(Map properties) {
   302    public void addProperties(Map<String,String> properties) {
   292       this._resolverSpi.engineAddProperies(properties);
   303       this._resolverSpi.engineAddProperies(properties);
   293    }
   304    }
   294 
   305 
   295    /**
   306    /**
   296     * Method getPropertyKeys
   307     * Method getPropertyKeys