resourceresolver.java

来自「JAVA 所有包」· Java 代码 · 共 298 行

JAVA
298
字号
/* * Copyright  1999-2004 The Apache Software Foundation. * *  Licensed under the Apache License, Version 2.0 (the "License"); *  you may not use this file except in compliance with the License. *  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, software *  distributed under the License is distributed on an "AS IS" BASIS, *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *  See the License for the specific language governing permissions and *  limitations under the License. * */package com.sun.org.apache.xml.internal.security.utils.resolver;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;import org.w3c.dom.Attr;/** * During reference validation, we have to retrieve resources from somewhere. * This is done by retrieving a Resolver. The resolver needs two arguments: The * URI in which the link to the new resource is defined and the BaseURI of the * file/entity in which the URI occurs (the BaseURI is the same as the SystemId. * * <UL xml:lang="DE" LANG="DE"> * <LI> Verschiedene Implementierungen k??nnen sich als Resolver registrieren. * <LI> Standardm????ig werden erste Implementierungen auf dem XML config file registrirt. * <LI> Der Benutzer kann bei Bedarf Implementierungen voranstellen oder anf??gen. * <LI> Implementierungen k??nnen mittels Features customized werden ?? *      (z.B. um Proxy-Passworter ??bergeben zu k??nnen). * <LI> Jede Implementierung bekommt das URI Attribut und den Base URI *      ??bergeben und muss antworten, ob sie aufl??sen kann. * <LI> Die erste Implementierung, die die Aufgabe erf??llt, f??hrt die Aufl??sung durch. * </UL> * * @author $Author: raul $ */public class ResourceResolver {   /** {@link java.util.logging} logging facility */    static java.util.logging.Logger log =         java.util.logging.Logger.getLogger(ResourceResolver.class.getName());   /** Field _alreadyInitialized */   static boolean _alreadyInitialized = false;   /** these are the system-wide resolvers */   static List _resolverVector = null;   /** Field _individualResolverVector */   List _individualResolverVector = null;   /** Field transformSpi */   protected ResourceResolverSpi _resolverSpi = null;   /**    * Constructor ResourceResolver    *    * @param className    * @throws ClassNotFoundException    * @throws IllegalAccessException    * @throws InstantiationException    */   private ResourceResolver(String className)           throws ClassNotFoundException, IllegalAccessException,                  InstantiationException {      this._resolverSpi =         (ResourceResolverSpi) Class.forName(className).newInstance();   }   /**    * Constructor ResourceResolver    *    * @param resourceResolver    */   public ResourceResolver(ResourceResolverSpi resourceResolver) {      this._resolverSpi = resourceResolver;   }   /**    * Method getInstance    *    * @param uri    * @param BaseURI    * @return the instnace    *    * @throws ResourceResolverException    */   public static final ResourceResolver getInstance(Attr uri, String BaseURI)           throws ResourceResolverException {      int length=ResourceResolver._resolverVector.size();      for (int i = 0; i < length; i++) {		  ResourceResolver resolver =            (ResourceResolver) ResourceResolver._resolverVector.get(i);                  if (true)         	if (log.isLoggable(java.util.logging.Level.FINE))                                     log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver.getClass().getName());         if ((resolver != null) && resolver.canResolve(uri, BaseURI)) {            return resolver;         }      }      Object exArgs[] = { ((uri != null)                           ? uri.getNodeValue()                           : "null"), BaseURI };      throw new ResourceResolverException("utils.resolver.noClass", exArgs,                                          uri, BaseURI);   }   /**    * Method getInstance    *    * @param uri    * @param BaseURI    * @param individualResolvers    * @return the instance    *    * @throws ResourceResolverException    */   public static final ResourceResolver getInstance(           Attr uri, String BaseURI, List individualResolvers)              throws ResourceResolverException {      if (true) {      	if (log.isLoggable(java.util.logging.Level.FINE))                                     log.log(java.util.logging.Level.FINE, "I was asked to create a ResourceResolver and got " + individualResolvers.size());      	if (log.isLoggable(java.util.logging.Level.FINE))                                     log.log(java.util.logging.Level.FINE, " extra resolvers to my existing " + ResourceResolver._resolverVector.size() + " system-wide resolvers");      }      // first check the individual Resolvers	  int size=0;      if ((individualResolvers != null) && ((size=individualResolvers.size()) > 0)) {         for (int i = 0; i < size; i++) {            ResourceResolver resolver =               (ResourceResolver) individualResolvers.get(i);            if (resolver != null) {               String currentClass = resolver._resolverSpi.getClass().getName();               if (true)               	if (log.isLoggable(java.util.logging.Level.FINE))                                     log.log(java.util.logging.Level.FINE, "check resolvability by class " + currentClass);               if (resolver.canResolve(uri, BaseURI)) {                  return resolver;               }            }         }      }	  return getInstance(uri,BaseURI);   }   /**    * The init() function is called by com.sun.org.apache.xml.internal.security.Init.init()    */   public static void init() {      if (!ResourceResolver._alreadyInitialized) {         ResourceResolver._resolverVector = new ArrayList(10);         _alreadyInitialized = true;      }   }   /**    * Method register    *    * @param className    */   public static void register(String className) {	    ResourceResolver resolver = null;        try {           resolver = new ResourceResolver(className);		   ResourceResolver._resolverVector.add(resolver);        } catch (Exception e) {//			Object exArgs[] = { ((uri != null)//                    ? uri.getNodeValue()//                    : "null"), BaseURI };////			throw new ResourceResolverException("utils.resolver.noClass",//                                   exArgs, e, uri, BaseURI);			log.log(java.util.logging.Level.WARNING, "Error loading resolver " + className +" disabling it");        } catch (NoClassDefFoundError e) {			log.log(java.util.logging.Level.WARNING, "Error loading resolver " + className +" disabling it");        }         }   /**    * Method registerAtStart    *    * @param className    */   public static void registerAtStart(String className) {      ResourceResolver._resolverVector.add(0, className);   }   /**    * Method resolve    *    * @param uri    * @param BaseURI    * @return the resource    *    * @throws ResourceResolverException    */   public static XMLSignatureInput resolveStatic(Attr uri, String BaseURI)           throws ResourceResolverException {      ResourceResolver myResolver = ResourceResolver.getInstance(uri, BaseURI);      return myResolver.resolve(uri, BaseURI);   }   /**    * Method resolve    *    * @param uri    * @param BaseURI    * @return the resource    *    * @throws ResourceResolverException    */   public XMLSignatureInput resolve(Attr uri, String BaseURI)           throws ResourceResolverException {      return this._resolverSpi.engineResolve(uri, BaseURI);   }   /**    * Method setProperty    *    * @param key    * @param value    */   public void setProperty(String key, String value) {      this._resolverSpi.engineSetProperty(key, value);   }   /**    * Method getProperty    *    * @param key    * @return the value of the property    */   public String getProperty(String key) {      return this._resolverSpi.engineGetProperty(key);   }   /**    * Method addProperties    *    * @param properties    */   public void addProperties(Map properties) {      this._resolverSpi.engineAddProperies(properties);   }   /**    * Method getPropertyKeys    *    * @return all property keys.    */   public String[] getPropertyKeys() {      return this._resolverSpi.engineGetPropertyKeys();   }   /**    * Method understandsProperty    *    * @param propertyToTest    * @return true if the resolver understands the property    */   public boolean understandsProperty(String propertyToTest) {      return this._resolverSpi.understandsProperty(propertyToTest);   }   /**    * Method canResolve    *    * @param uri    * @param BaseURI    * @return true if it can resolve the uri    */   private boolean canResolve(Attr uri, String BaseURI) {      return this._resolverSpi.engineCanResolve(uri, BaseURI);   }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?