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

📄 introspectionutils.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation.  All rights  * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, if *    any, must include the following acknowlegement:   *       "This product includes software developed by the  *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowlegement may appear in the software itself, *    if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software *    Foundation" must not be used to endorse or promote products derived *    from this software without prior written permission. For written  *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" *    nor may "Apache" appear in their names without prior written *    permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.tomcat.util;import java.lang.reflect.*;import java.net.*;import java.io.*;import java.util.*;// Depends: JDK1.1/** *  Utils for introspection and reflection */public final class IntrospectionUtils {    /** Call execute() - any ant-like task should work     */    public static void execute( Object proxy, String method  )	throws Exception    {	Method executeM=null;	Class c=proxy.getClass();	Class params[]=new Class[0];	//	params[0]=args.getClass();	executeM=findMethod( c, method, params );	if( executeM == null ) {	    throw new RuntimeException("No execute in " + proxy.getClass() );	}	executeM.invoke(proxy, null );//new Object[] { args });    }    /**      *  Call void setAttribute( String ,Object )     */    public static void setAttribute( Object proxy, String n, Object v)	throws Exception    {	if( proxy instanceof AttributeHolder ) {	    ((AttributeHolder)proxy).setAttribute( n, v );	    return;	}		Method executeM=null;	Class c=proxy.getClass();	Class params[]=new Class[2];	params[0]= String.class;	params[1]= Object.class;	executeM=findMethod( c, "setAttribute", params );	if( executeM == null ) {	    System.out.println("No setAttribute in " + proxy.getClass() );	    return;	}	if( false )	    System.out.println("Setting " + n + "=" + v + "  in " + proxy);	executeM.invoke(proxy, new Object[] { n, v });	return;     }    /**      *  Call void getAttribute( String )     */    public static Object getAttribute( Object proxy, String n)	throws Exception    {	Method executeM=null;	Class c=proxy.getClass();	Class params[]=new Class[1];	params[0]= String.class;	executeM=findMethod( c, "getAttribute", params );	if( executeM == null ) {	    System.out.println("No getAttribute in " + proxy.getClass() );	    return null;	}	return executeM.invoke(proxy, new Object[] { n });    }    /** Construct a URLClassLoader. Will compile and work in JDK1.1 too.     */    public static ClassLoader getURLClassLoader( URL urls[],						 ClassLoader parent )    {	try {	    Class urlCL=Class.forName( "java.net.URLClassLoader");	    Class paramT[]=new Class[2];	    paramT[0]= urls.getClass();	    paramT[1]=ClassLoader.class;	    Method m=findMethod( urlCL, "newInstance", paramT);	    if( m==null ) return null;	    	    ClassLoader cl=(ClassLoader)m.invoke( urlCL,						  new Object[] { urls,								 parent } );	    return cl;	} catch(ClassNotFoundException ex ) {	    // jdk1.1	    return null;	} catch(Exception ex ) {	    ex.printStackTrace();	    return null;	}    }    public static String guessInstall(String installSysProp,		String homeSysProp, String jarName) {	return guessInstall( installSysProp, homeSysProp, jarName, null);    }        /** Guess a product install/home by analyzing the class path.     *  It works for product using the pattern: lib/executable.jar     *  or if executable.jar is included in classpath by a shell     *  script. ( java -jar also works )     *     *  Insures both "install" and "home" System properties are set.     *  If either or both System properties are unset, "install" and     *  "home" will be set to the same value.  This value will be     *  the other System  property that is set, or the guessed value     *  if neither is set.     */    public static String guessInstall(String installSysProp, String homeSysProp,			String jarName,	String classFile) {	String install=null;	String home=null;		if ( installSysProp != null )	    install=System.getProperty( installSysProp );	if( homeSysProp != null )	    home=System.getProperty( homeSysProp );	if ( install != null ) {	    if ( home == null )		System.getProperties().put( homeSysProp, install );	    return install;	}	// Find the directory where jarName.jar is located		String cpath=System.getProperty( "java.class.path");	String pathSep=System.getProperty( "path.separator");	StringTokenizer st=new StringTokenizer( cpath, pathSep );	while( st.hasMoreTokens() ) {	    String path=st.nextToken();	    //	    log( "path " + path );	    if( path.endsWith( jarName ) ) {		home=path.substring( 0, path.length() - jarName.length() );		try {                    if( "".equals(home) ) {                        home=new File("./").getCanonicalPath();                    } else if( home.endsWith(File.separator) ) {			home = home.substring(0,home.length()-1);		    }                    File f=new File( home );		    String parentDir = f.getParent();		    if(parentDir == null)			parentDir = home;  // unix style		    File f1=new File ( parentDir );		    install = f1.getCanonicalPath();		    if( installSysProp != null )			System.getProperties().put( installSysProp, install );		    if( home == null && homeSysProp != null )			System.getProperties().put( homeSysProp, install );		    return install;		} catch( Exception ex ) {		    ex.printStackTrace();		}	    } else  {		String fname=path + ( path.endsWith("/") ?"":"/" ) + classFile;		if( new File( fname ).exists()) {		    try {			File f=new File( path );			String parentDir = f.getParent();			if( parentDir == null )			    parentDir = path; // unix style			File f1=new File ( parentDir );			install = f1.getCanonicalPath();			if( installSysProp != null )			    System.getProperties().put( installSysProp,							install );			if( home == null && homeSysProp != null )			    System.getProperties().put( homeSysProp, install );			return install;		    } catch( Exception ex ) {			ex.printStackTrace();		    }		}	    }	}        // if install directory can't be found, use home as the default	if ( home != null ) {	    System.getProperties().put( installSysProp, home );	    return home;	}	return null;    }    /** Debug method, display the classpath     */    public static void displayClassPath( String msg, URL[] cp ) {	System.out.println(msg);	for( int i=0; i<cp.length; i++ ) {	    System.out.println( cp[i].getFile() );	}    }    public static String PATH_SEPARATOR = System.getProperty("path.separator");    /**     * Adds classpath entries from a vector of URL's to the     * "tc_path_add" System property.  This System property lists     * the classpath entries common to web applications. This System     * property is currently used by Jasper when its JSP servlet     * compiles the Java file for a JSP.    */    public static String classPathAdd(URL urls[], String cp )    {	if( urls==null ) return cp;	for( int i=0; i<urls.length; i++ ) {            if( cp != null)                cp += PATH_SEPARATOR + urls[i].getFile();            else                cp = urls[i].getFile();        }        return cp;    }    /** Find a method with the right name	If found, call the method ( if param is int or boolean we'll convert	value to the right type before) - that means you can have setDebug(1).    */    public static void setProperty( Object o, String name, String value ) {	if( dbg > 1 ) d("setProperty(" +			o.getClass() + " " +  name + "="  +			value  +")" );	String setter= "set" +capitalize(name);	try {	    Method methods[]=findMethods( o.getClass() );	    Method setPropertyMethod=null;	    // First, the ideal case - a setFoo( String ) method	    for( int i=0; i< methods.length; i++ ) {		Class paramT[]=methods[i].getParameterTypes();		if( setter.equals( methods[i].getName() ) &&		    paramT.length == 1 &&		    "java.lang.String".equals( paramT[0].getName())) {		    		    methods[i].invoke( o, new Object[] { value } );		    return;		}	    }	    	    // Try a setFoo ( int ) or ( boolean )	    for( int i=0; i< methods.length; i++ ) {		boolean ok=true;		if( setter.equals( methods[i].getName() ) &&		    methods[i].getParameterTypes().length == 1) {		    // match - find the type and invoke it		    Class paramType=methods[i].getParameterTypes()[0];		    Object params[]=new Object[1];		    // Try a setFoo ( int )		    if ("java.lang.Integer".equals( paramType.getName()) ||			"int".equals( paramType.getName())) {			try {			    params[0]=new Integer(value);			} catch( NumberFormatException ex ) {ok=false;}		    // Try a setFoo ( boolean )		    } else if ("java.lang.Boolean".			       equals( paramType.getName()) ||			"boolean".equals( paramType.getName())) {			params[0]=new Boolean(value);		    // Try a setFoo ( InetAddress )		    } else if ("java.net.InetAddress".				equals( paramType.getName())){			try{ 			    params[0]= InetAddress.getByName(value); 			}catch(UnknownHostException exc) { 			    d("Unable to resolve host name:" + value); 			    ok=false; 			}  		    // Unknown type		    } else {			d("Unknown type " + paramType.getName() );		    }		    if( ok ) {			methods[i].invoke( o, params );			return;		    }		}		// save "setProperty" for later		if( "setProperty".equals( methods[i].getName())) {		    setPropertyMethod=methods[i];		}	    }	    // Ok, no setXXX found, try a setProperty("name", "value")	    if( setPropertyMethod != null ) {		Object params[]=new Object[2];		params[0]=name;		params[1]=value;		setPropertyMethod.invoke( o, params );	    }	} catch( IllegalArgumentException ex2 ) {            System.err.println("IAE " + o + " " + name + " " + value);            ex2.printStackTrace();	} catch( SecurityException ex1 ) {	    if( dbg > 0 )		d("SecurityException for " + o.getClass() + " " +			name + "="  + value  +")" );	    if( dbg > 1 ) ex1.printStackTrace();	} catch (IllegalAccessException iae) {	    if( dbg > 0 )		d("IllegalAccessException for " +			o.getClass() + " " +  name + "="  + value  +")" );	    if( dbg > 1 ) iae.printStackTrace();	} catch (InvocationTargetException ie) {	    if( dbg > 0 )		d("InvocationTargetException for " + o.getClass() +			" " +  name + "="  + value  +")" );	    if( dbg > 1 ) ie.printStackTrace();	}    }    public static Object getProperty( Object o, String name ) {	String getter= "get" +capitalize(name);	try {	    Method methods[]=findMethods( o.getClass() );	    Method getPropertyMethod=null;	    // First, the ideal case - a getFoo() method	    for( int i=0; i< methods.length; i++ ) {		Class paramT[]=methods[i].getParameterTypes();		if( getter.equals( methods[i].getName() ) &&		    paramT.length == 0 ) {		    return methods[i].invoke( o, null );		}	    		if( "getProperty".equals( methods[i].getName())) {		    getPropertyMethod=methods[i];		}		if( "getAttribute".equals( methods[i].getName())) {		    getPropertyMethod=methods[i];		}	    }	    // Ok, no setXXX found, try a getProperty("name")	    if( getPropertyMethod != null ) {		Object params[]=new Object[1];		params[0]=name;		getPropertyMethod.invoke( o, params );	    }	} catch( IllegalArgumentException ex2 ) {            System.err.println("IAE " + o + " " + name );            ex2.printStackTrace();	} catch( SecurityException ex1 ) {	    if( dbg > 0 )		d("SecurityException for " + o.getClass() + " " +			name + ")" );	    if( dbg > 1 ) ex1.printStackTrace();	} catch (IllegalAccessException iae) {	    if( dbg > 0 )		d("IllegalAccessException for " +			o.getClass() + " " +  name  +")" );	    if( dbg > 1 ) iae.printStackTrace();	} catch (InvocationTargetException ie) {	    if( dbg > 0 )		d("InvocationTargetException for " + o.getClass() +			" " +  name   +")" );	    if( dbg > 1 ) ie.printStackTrace();	}        return null;    }    /**      */    public static void setProperty( Object o, String name ) {	String setter= "set" +capitalize(name);	try {	    Method methods[]=findMethods( o.getClass() );	    Method setPropertyMethod=null;	    // find setFoo() method	    for( int i=0; i< methods.length; i++ ) {		Class paramT[]=methods[i].getParameterTypes();		if( setter.equals( methods[i].getName() ) &&		    paramT.length == 0 ) {		    methods[i].invoke( o, new Object[] {} );		    return;		}	    }	} catch( Exception ex1 ) {	    if( dbg > 0 )		d("Exception for " + o.getClass() + " " + name);	    if( dbg > 1 ) ex1.printStackTrace();	}     }        /** Replace ${NAME} with the property value     *  @deprecated. Use the explicit method     */    public static String replaceProperties(String value,					   Object getter )    {        if( getter instanceof Hashtable )            return replaceProperties( value, (Hashtable)getter, null );        if( getter instanceof PropertySource ) {            PropertySource src[]=new PropertySource[] {(PropertySource)getter};            return replaceProperties( value, null,  src);        }        return value;    }    /** Replace ${NAME} with the property value     */    public static String replaceProperties(String value,					   Hashtable staticProp, PropertySource dynamicProp[] )    {        StringBuffer sb=new StringBuffer();        int prev=0;        // assert value!=nil        int pos;        while( (pos=value.indexOf( "$", prev )) >= 0 ) {            if(pos>0) {

⌨️ 快捷键说明

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