⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlwalker.java

📁 webwork source
💻 JAVA
字号:
/* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */package webwork.view.xslt.SAXAdapter;import org.apache.commons.logging.*;import org.xml.sax.ContentHandler;import org.xml.sax.SAXException;import webwork.view.xslt.SAXAdapter.dom.NodeWalker;import webwork.view.xslt.SAXAdapter.dom.TextWalker;import java.util.*;/** * This class is used by XMLReaderAdapter to do the actual walking of the object * tree. Because the XMLReader Interface is stateful in respect of the systemId * (here the walked bean) this class implements the stateless part. * */public class XMLWalker{   // Walkers that are used without been registered due to   // the nature of the classes they walk.   private Walker arrayWalker = new ArrayWalker();   private Walker beanWalker = new BeanWalker();   private Walker toStringWalker = new ToStringWalker();   private Walker nullWalker = new NullWalker();   // walker registry   private List walkers = new ArrayList();   private Map walkerCache = new HashMap();   public XMLWalker()   {      // Add default walkers      registerWalker(new CollectionWalker());      registerWalker(new EnumerationWalker());      registerWalker(new MapWalker());      registerWalker(new BooleanWalker());      registerWalker(new CharacterWalker());      // Add DOM walkers      registerWalker(new TextWalker());      registerWalker(new NodeWalker());      // Arrays and JavaBeans are being processed specially using Class.isArray() but register it      // here for completeness.      registerWalker(arrayWalker);      registerWalker(beanWalker);      registerWalker(toStringWalker);   }   public void walk(ContentHandler contentHandler, Object object, String name, List walkedInstances) throws SAXException   {      //Null property handling:      if (object == null) {         nullWalker.walk(this, contentHandler, object, name, walkedInstances);         return; // fast exit.      }      //Extract the object's class.      Class klass = object.getClass();      //Try to find a registered walker      Walker walker = findWalker(klass);      if (walker != null)      {         //Found special walker         walker.walk(this, contentHandler, object, name, walkedInstances);      }      else if (klass.isArray())      {         //Use arrayWalker to process the object         arrayWalker.walk(this, contentHandler, object, name, walkedInstances);      }      else if (String.class.isAssignableFrom(klass) || klass.isPrimitive() || Number.class.isAssignableFrom(klass))      {         //Primitives and java.lang.Numbers are handled by toStringWalker, too.         toStringWalker.walk(this, contentHandler, object, name, walkedInstances);      }      else      {         //Fallback: dissect the object using the JavaBeans API.         beanWalker.walk(this, contentHandler, object, name, walkedInstances);      }   }   /**    * Registers locally the class the walker returns as    * it's walkable type.    */   public void registerWalker(Walker walker)   {      //Registering a new walker will render the cached information obsolete.      walkerCache.clear();      this.walkers.add(walker);   }   /**    * Find a walker registered for object's class.    * To speed up the walking of the collection of    * registered Walkers, a cache is used.    * If no Walker was found null is returned.    *    * @return the Walker which was registered for the object's class or null    *         if no walker was registered.    **/   private synchronized Walker findWalker(Class klass)   {      // Try to look up walker in cache.      if (walkerCache.containsKey(klass))      {         return (Walker) walkerCache.get(klass);      }      // Try to find walker in registred walkers.      Walker walker = null;      findWalker: for (Iterator i = walkers.iterator(); i.hasNext();)      {         Walker tryWalker = (Walker) i.next();         if (tryWalker.getWalkedType().isAssignableFrom(klass))         {            walker = tryWalker;            break findWalker;         }      }      LogFactory.getLog(this.getClass()).debug("Caching " + (walker != null ? "walker " + walker.getClass().getName() :                "no walker") + " for " + klass.getName());      walkerCache.put(klass, walker);      return walker;   }   /**    * Expose toStringWalker to public for BeanWalker can use it as a    * fall back when to properties are found.    */   public Walker getToStringWalker() {      return toStringWalker;   }}

⌨️ 快捷键说明

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