You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2003/12/12 03:48:47 UTC

cvs commit: jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser JTidyHTMLParser.java HtmlParserHTMLParser.java RegexpHTMLParser.java HTMLParser.java

sebb        2003/12/11 18:48:47

  Modified:    src/protocol/http/org/apache/jmeter/protocol/http/parser
                        JTidyHTMLParser.java HtmlParserHTMLParser.java
                        RegexpHTMLParser.java HTMLParser.java
  Log:
  Simplify parser instantiation
  
  Revision  Changes    Path
  1.8       +6 -21     jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java
  
  Index: JTidyHTMLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- JTidyHTMLParser.java	12 Dec 2003 01:36:47 -0000	1.7
  +++ JTidyHTMLParser.java	12 Dec 2003 02:48:47 -0000	1.8
  @@ -81,18 +81,15 @@
       /** Used to store the Logger (used for debug and error messages). */
       transient private static Logger log = LoggingManager.getLoggerForClass();
   
  -	/** Stores the singleton parser to be used */
  -	private static HTMLParser myParser = new JTidyHTMLParser();
  -
  -    /**
  -     * This is a singleton class
  -     */
  -    //TODO make private 
  -    JTidyHTMLParser()
  +    protected JTidyHTMLParser()
       {
           super();
       }
   
  +	protected boolean isReusable()
  +	{
  +		return true;
  +	}
   
       /* (non-Javadoc)
        * @see org.apache.jmeter.protocol.http.parser.HTMLParser#getEmbeddedResourceURLs(byte[], java.net.URL)
  @@ -287,16 +284,4 @@
           log.debug("End   : getDOM");
           return node;
       }
  -    
  -    /* (non-Javadoc)
  -     * @see org.apache.jmeter.protocol.http.parser.HTMLParser#getParserInstance()
  -     */
  -    public static HTMLParser getParserInstance()
  -    {
  -		return myParser;
  -    }
  -    
  -	public static boolean isParserReusable(){
  -		return true;
  -	}
   }
  
  
  
  1.8       +8 -19     jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/HtmlParserHTMLParser.java
  
  Index: HtmlParserHTMLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/HtmlParserHTMLParser.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- HtmlParserHTMLParser.java	12 Dec 2003 01:36:47 -0000	1.7
  +++ HtmlParserHTMLParser.java	12 Dec 2003 02:48:47 -0000	1.8
  @@ -80,14 +80,15 @@
       /** Used to store the Logger (used for debug and error messages). */
       transient private static Logger log= LoggingManager.getLoggerForClass();
   
  -    /** Stores the singleton parser to be used */
  -    private static HTMLParser myParser = new HtmlParserHTMLParser();
  -    
  -    // Not intended to be instantiated externally
  -	//TODO make private? 
  -	HtmlParserHTMLParser(){
  +	protected HtmlParserHTMLParser(){
   		super();
   	}
  +
  +	protected boolean isReusable()
  +	{
  +		return true;
  +	}
  +
       /* (non-Javadoc)
        * @see org.apache.jmeter.protocol.http.parser.HtmlParser#getEmbeddedResourceURLs(byte[], java.net.URL)
        */
  @@ -236,16 +237,4 @@
           // add applet tag scanner
           parser.addScanner(new AppletScanner());
       }
  -
  -    /* (non-Javadoc)
  -     * @see org.apache.jmeter.protocol.http.parser.HTMLParser#getParserInstance()
  -     */
  -    public static HTMLParser getParserInstance()
  -    {
  -        return myParser;
  -    }
  -
  -	public static boolean isParserReusable(){
  -		return true;
  -	}
   }
  
  
  
  1.10      +7 -18     jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/RegexpHTMLParser.java
  
  Index: RegexpHTMLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/RegexpHTMLParser.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- RegexpHTMLParser.java	12 Dec 2003 01:35:23 -0000	1.9
  +++ RegexpHTMLParser.java	12 Dec 2003 02:48:47 -0000	1.10
  @@ -113,8 +113,6 @@
    */
   class RegexpHTMLParser extends HTMLParser
   {
  -    /** Stores the singleton parser to be used */
  -    private static HTMLParser myParser = new RegexpHTMLParser();
   
       /**
        * Regexp fragment matching a tag attribute's value (including
  @@ -181,11 +179,15 @@
       /** Used to store the Logger (used for debug and error messages). */
       transient private static Logger log;
   
  +	protected boolean isReusable()
  +	{
  +		return true;
  +	}
  +
       /**
        * Make sure to compile the regular expression upon instantiation:
        */
  -    //TODO make private? 
  -    RegexpHTMLParser() {
  +    protected RegexpHTMLParser() {
           super();
   
           // Define this here to ensure it's ready to report any trouble
  @@ -292,17 +294,4 @@
           }
           return urls.iterator();
       }
  -    
  -    /* (non-Javadoc)
  -     * @see org.apache.jmeter.protocol.http.parser.HTMLParser#getParserInstance()
  -     */
  -    public static HTMLParser getParserInstance()
  -    {
  -        return myParser;
  -    }
  -
  -    public static boolean isParserReusable(){
  -        return true;
  -    }
  -
   }
  
  
  
  1.10      +31 -123   jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/HTMLParser.java
  
  Index: HTMLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/HTMLParser.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- HTMLParser.java	12 Dec 2003 01:45:17 -0000	1.9
  +++ HTMLParser.java	12 Dec 2003 02:48:47 -0000	1.10
  @@ -61,8 +61,6 @@
   import java.io.File;
   import java.io.FileInputStream;
   import java.io.FileReader;
  -import java.lang.reflect.InvocationTargetException;
  -import java.lang.reflect.Method;
   import java.net.URL;
   import java.util.ArrayList;
   import java.util.Collection;
  @@ -89,16 +87,7 @@
       /** Used to store the Logger (used for debug and error messages). */
   	transient private static Logger log = LoggingManager.getLoggerForClass();
   
  -	private static final String PARSER_METHOD = "getParserInstance";
  -	private static final String PARSER_REUSABLE = "isParserReusable";
  -
  -    /*
  -     * Cache of methods.
  -     * These need to be invoked each time, in case the parser cannot be re-used 
  -     */
  -    private static Hashtable methods = new Hashtable(3);
  -
  -    // Cache of parsers - used if parsers are re-usable
  +    // Cache of parsers - parsers must be re-usable
   	private static Hashtable parsers = new Hashtable(3);
       
   	private final static String PARSER_CLASSNAME = "htmlParser.className";
  @@ -113,33 +102,6 @@
       protected HTMLParser() {
       }
       
  -//    /**
  -//     * Create the single instance.
  -//     */
  -//    private static void initialize()
  -//    {
  -//        String htmlParserClassName=
  -//            JMeterUtils.getPropDefault(PARSER_CLASSNAME,DEFAULT_PARSER);
  -//
  -//        try
  -//        {
  -//            parser=
  -//                (HTMLParser)Class.forName(htmlParserClassName).newInstance();
  -//        }
  -//        catch (InstantiationException e)
  -//        {
  -//            throw new Error(e);
  -//        }
  -//        catch (IllegalAccessException e)
  -//        {
  -//            throw new Error(e);
  -//        }
  -//        catch (ClassNotFoundException e)
  -//        {
  -//            throw new Error(e);
  -//        }
  -//        log.info("Using "+htmlParserClassName);
  -//    }
   
       public static final HTMLParser getParser(){
           return getParser(JMeterUtils.getPropDefault(PARSER_CLASSNAME,DEFAULT_PARSER));
  @@ -154,83 +116,32 @@
   			return pars;
   		}
   
  -        // Is there a cached method for creating a parser?
  -		Method meth =(Method) methods.get(htmlParserClassName);
  -		if (meth != null) {
  -			try
  -            {
  -                pars = (HTMLParser) meth.invoke(null,null);
  -            }
  -			catch (NullPointerException e) // method did not return anything
  -			{
  -				throw new Error(PARSER_METHOD+"() returned null",e);
  -			}
  -            catch (IllegalArgumentException e)
  -            {
  -				throw new Error("Should not happen",e);
  -            }
  -            catch (IllegalAccessException e)
  -            {
  -				throw new Error("Should not happen",e);
  -            }
  -            catch (InvocationTargetException e)
  -            {
  -				throw new Error("Should not happen",e);
  -            };
  -			log.info("Refetched "+htmlParserClassName);
  -			return pars;
  -		}
  -		
  -		// Create the method cache, and the parser cache if possible
   		try
  -		{
  -			Class clazz = Class.forName(htmlParserClassName);
  -			meth = clazz.getMethod(PARSER_METHOD,null);
  -			methods.put(htmlParserClassName,meth);// Cache the method
  -			pars= (HTMLParser) meth.invoke(null,null);
  -			boolean reusable=false;
  -			try{
  -				reusable=((Boolean)
  -				           clazz.getMethod(PARSER_REUSABLE,null)
  -				          .invoke(null,null))
  -				          .booleanValue();
  -				if (reusable){
  -					parsers.put(htmlParserClassName,pars);// cache the parser
  -				}
  -			}
  -			catch (Exception e){
  -				reusable=false;
  -			}
  -			log.info("Created "+htmlParserClassName+(reusable? " - reusable":""));
  -		}
  -		catch (NullPointerException e) // method did not return anything
  -		{
  -			throw new Error(PARSER_METHOD+"() returned null",e);
  -		}
  -		catch (IllegalAccessException e)
  -		{
  -			throw new Error(e);
  -		}
  -		catch (ClassNotFoundException e)
  -		{
  -			throw new Error(e);
  -		}
  -		catch (SecurityException e)
           {
  -			throw new Error(e);
  +        	Object clazz = Class.forName(htmlParserClassName).newInstance();
  +        	if (clazz instanceof HTMLParser){
  +				pars = (HTMLParser) clazz;
  +        	} else {
  +        		throw new Error(new ClassCastException(htmlParserClassName));
  +        	}
           }
  -        catch (NoSuchMethodException e)
  +        catch (InstantiationException e)
           {
   			throw new Error(e);
           }
  -        catch (IllegalArgumentException e)
  +        catch (IllegalAccessException e)
           {
   			throw new Error(e);
           }
  -        catch (InvocationTargetException e)
  +        catch (ClassNotFoundException e)
           {
   			throw new Error(e);
           }
  +		log.info("Created "+htmlParserClassName);
  +		if (pars.isReusable()){
  +			parsers.put(htmlParserClassName,pars);// cache the parser
  +		}
  +		
       	return pars;
       }
   
  @@ -282,6 +193,16 @@
   		throws HTMLParseException;
   
   
  +    /**
  +     * Parsers should over-ride this method if the parser class is re-usable,
  +     * in which case the class will be cached for the next getParser() call.
  +     * 
  +     * @return true if the Parser is reusable
  +     */
  +    protected boolean isReusable()
  +    {
  +    	return false;
  +    }
   
   //////////////////////////// TEST CODE FOLLOWS /////////////////////////////
   
  @@ -307,7 +228,7 @@
   		}
   
   
  -		private static class TestClass //Can't instantiate
  +		private class TestClass //Can't instantiate
   		{
       	    private TestClass(){};	 
   		}
  @@ -427,14 +348,8 @@
   			}
   			catch (Error e)
   			{
  -				if (e.getCause() instanceof NoSuchMethodException)
  -				{
  -					 //	This is OK
  -				}
  -				else
  -				{
  -					throw e;
  -				}
  +				if (e.getCause() instanceof ClassCastException) return;
  +				throw e;
   			}
   		}
   
  @@ -445,14 +360,8 @@
   			}
   			catch (Error e)
   			{
  -				if (e.getCause() instanceof NoSuchMethodException)
  -				{
  -					 //	This is OK
  -				}
  -				else
  -				{
  -					throw e;
  -				}
  +				if (e.getCause() instanceof InstantiationException) return;
  +				throw e;
   			}
   		}
   
  @@ -476,7 +385,6 @@
   		throws Exception
   		{
   			log.info("file   "+file);
  -			log.info("parser "+p.getClass().getName());
   			File f= new File(file);
   			byte[] buffer= new byte[(int)f.length()];
   			int len= new FileInputStream(f).read(buffer);
  
  
  

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