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

📄 introspectionutils.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                sb.append( value.substring( prev, pos ) );            }            if( pos == (value.length() - 1)) {                sb.append('$');                prev = pos + 1;            }            else if (value.charAt( pos + 1 ) != '{' ) {                sb.append( value.charAt( pos + 1 ) );                prev=pos+2; // XXX            } else {                int endName=value.indexOf( '}', pos );                if( endName < 0 ) {		    sb.append( value.substring( pos ));		    prev=value.length();		    continue;                }                String n=value.substring( pos+2, endName );		String v= null;		if( staticProp != null ) {		    v=(String)((Hashtable)staticProp).get(n);		}                if( v==null && dynamicProp != null) {                    for( int i=0; i<dynamicProp.length; i++ ) {                        v=dynamicProp[i].getProperty( n );                        if( v!=null ) {                            break;                        }                    }		}		if( v== null )		    v = "${"+n+"}";                                 sb.append( v );                prev=endName+1;            }        }        if( prev < value.length() ) sb.append( value.substring( prev ) );        return sb.toString();    }        /** Reverse of Introspector.decapitalize     */    public static String capitalize(String name) {	if (name == null || name.length() == 0) {	    return name;	}	char chars[] = name.toCharArray();	chars[0] = Character.toUpperCase(chars[0]);	return new String(chars);    }    public static String unCapitalize(String name) {	if (name == null || name.length() == 0) {	    return name;	}	char chars[] = name.toCharArray();	chars[0] = Character.toLowerCase(chars[0]);	return new String(chars);    }    // -------------------- Class path tools --------------------    /** Add all the jar files in a dir to the classpath,     *  represented as a Vector of URLs.     */     public static void addToClassPath( Vector cpV, String dir ) {	try{            String cpComp[]=getFilesByExt(dir, ".jar");            if (cpComp != null){                int jarCount=cpComp.length;                for( int i=0; i< jarCount ; i++ ) {		    URL url=getURL(  dir , cpComp[i] );                    if( url!=null )			cpV.addElement( url );                }            }        }catch(Exception ex){            ex.printStackTrace();        }    }    public static void addToolsJar( Vector v )    {	try {            // Add tools.jar in any case            File f=new File( System.getProperty( "java.home" ) +                             "/../lib/tools.jar");            if( ! f.exists() ) {                // On some systems java.home gets set to the root of jdk.                // That's a bug, but we can work around and be nice.                f=new File( System.getProperty( "java.home" ) +                                 "/lib/tools.jar");                if( f.exists() ) {                    System.out.println("Detected strange java.home value " +                                       System.getProperty( "java.home" ) +                                       ", it should point to jre");                }            }            URL url=new URL( "file", "" , f.getAbsolutePath() );	    v.addElement( url );	} catch ( MalformedURLException ex ) {	    ex.printStackTrace();	}    }        /** Return all files with a given extension in a dir     */    public static String[] getFilesByExt( String ld, String ext ) {	File dir = new File(ld);        String[] names=null;	final String lext=ext;        if (dir.isDirectory()){            names = dir.list( new FilenameFilter(){            public boolean accept(File d, String name) {                if (name.endsWith(lext)){                    return true;                }                return false;            }            });        }	return names;    }    /** Construct a file url from a file, using a base dir     */    public static URL getURL( String base, String file ) {        try {            File baseF = new File(base);            File f = new File(baseF,file);            String path = f.getCanonicalPath();            if( f.isDirectory() ){                    path +="/";            }	    if( ! f.exists() ) return null;            return new URL( "file", "", path );        } catch (Exception ex) {            ex.printStackTrace();            return null;        }    }    /**     * add elements from the classpath <i>cp</i> to a Vector     * <i>jars</i> as file URLs (We use Vector for JDK 1.1 compat).     * <p>     * @param <b>cp</b> a String classpath of directory or jar file     *                    elements separated by path.separator delimiters.     * @return a Vector of URLs.     */    public static void addJarsFromClassPath(Vector jars, String cp)            throws IOException,MalformedURLException    {        String sep = System.getProperty("path.separator");        String token;        StringTokenizer st;        if(cp!=null){            st = new StringTokenizer(cp,sep);            while(st.hasMoreTokens()){                File f = new File(st.nextToken());                String path = f.getCanonicalPath();                if(f.isDirectory()){                        path += "/";                }                URL url = new URL("file","",path);                if(!jars.contains(url)){                        jars.addElement(url);                }            }        }    }    /** Return a URL[] that can be used to construct a class loader     */    public static URL[] getClassPath(Vector v){        URL[] urls=new URL[ v.size() ];        for( int i=0; i<v.size(); i++ ) {            urls[i]=(URL)v.elementAt( i );        }        return urls;    }    /** Construct a URL classpath from files in a directory,     *  a cpath property, and tools.jar.     */    public static URL[] getClassPath( String dir, String cpath,				      String cpathProp, boolean addTools )	throws IOException, MalformedURLException    {	Vector jarsV = new Vector();	if( dir!=null ) {	    // Add dir/classes first, if it exists	    URL url=getURL( dir, "classes");	    if( url!=null )		jarsV.addElement(url);	    addToClassPath( jarsV, dir );	}		if( cpath != null )	    addJarsFromClassPath(jarsV,cpath);		if( cpathProp!=null ) {	    String cpath1=System.getProperty( cpathProp );	    addJarsFromClassPath(jarsV,cpath1);	}	if(addTools)	    addToolsJar( jarsV );		return getClassPath(jarsV);    }        // -------------------- Mapping command line params to setters    public static boolean processArgs(Object proxy, String args[] ) 	throws Exception    {	String args0[]=null;	if( null != findMethod( proxy.getClass(),				"getOptions1", new Class[] {} )) {	    args0=(String[])callMethod0( proxy, "getOptions1");	}	if( args0==null ) {	    //args0=findVoidSetters(proxy.getClass());	    args0=findBooleanSetters(proxy.getClass());	}	Hashtable h=null;	if( null != findMethod( proxy.getClass(),				"getOptionAliases", new Class[] {} )) {	    h=(Hashtable)callMethod0( proxy, "getOptionAliases");	}	return processArgs( proxy, args, args0, null, h );    }    public static boolean processArgs(Object proxy, String args[],				      String args0[], String args1[],				      Hashtable aliases )	throws Exception    {	for( int i=0; i< args.length; i++ ) {	    String arg=args[i];	    if( arg.startsWith("-"))		arg=arg.substring(1);	    if( aliases != null && aliases.get( arg ) != null)		arg=(String)aliases.get(arg);	    if( args0!=null ) {		boolean set=false;		for( int j=0; j< args0.length ; j++ ) {		    if( args0[j].equalsIgnoreCase( arg )) {			setProperty( proxy, args0[j], "true");			set=true;			break;		    }		}		if( set ) continue;	    }	    if( args1!=null ) {		for( int j=0; j< args1.length ; j++ ) {		    if( args1[j].equalsIgnoreCase( arg )) {			i++;			if( i >= args.length )			    return false;			setProperty( proxy, arg, args[i]);			break;		    }		}	    } else {		// if args1 is not specified,assume all other options have param		i++;		if( i >= args.length )		    return false;		setProperty( proxy,arg, args[i]);	    }	}	return true;    }    // -------------------- other utils  --------------------    public static String[] findVoidSetters( Class c ) {	Method m[]=findMethods( c );	if( m==null ) return null;	Vector v=new Vector();	for( int i=0; i<m.length; i++ ) {	    if( m[i].getName().startsWith("set") &&		m[i].getParameterTypes().length == 0 ) {		String arg=m[i].getName().substring( 3 );		v.addElement( unCapitalize( arg ));	    }	}	String s[]=new String[v.size()];	for( int i=0; i<s.length; i++ ) {	    s[i]=(String)v.elementAt( i );	}	return s;    }    public static String[] findBooleanSetters( Class c ) {	Method m[]=findMethods( c );	if( m==null ) return null;	Vector v=new Vector();	for( int i=0; i<m.length; i++ ) {	    if( m[i].getName().startsWith("set") &&	    	m[i].getParameterTypes().length == 1 &&	    	"boolean".equalsIgnoreCase( m[i].getParameterTypes()[0].getName()) ) {	    	String arg=m[i].getName().substring( 3 );	    	v.addElement( unCapitalize( arg ));	    } 	}	String s[]=new String[v.size()];	for( int i=0; i<s.length; i++ ) {	    s[i]=(String)v.elementAt( i );	}	return s;    }        static Hashtable objectMethods=new Hashtable();    public static Method[] findMethods( Class c ) {	Method methods[]= (Method [])objectMethods.get( c );	if( methods != null ) return methods;		methods=c.getMethods();	objectMethods.put( c, methods );	return methods;    }    public static Method findMethod( Class c, String name, Class params[] ) {	Method methods[] = findMethods( c );	if( methods==null ) return null;	for (int i = 0; i < methods.length; i++) {	    if (methods[i].getName().equals(name) ) {		Class methodParams[]=methods[i].getParameterTypes();		if( methodParams==null )		    if( params==null || params.length==0 )			return methods[i];		if( params==null )		    if( methodParams==null || methodParams.length==0 )			return methods[i];		if( params.length != methodParams.length )		    continue;		boolean found=true;		for( int j=0; j< params.length; j++ ) {		    if( params[j] != methodParams[j] ) {			found=false;			break;		    }		}		if( found ) return methods[i];	    }	}	return null;    }        /** Test if the object implements a particular     *  method     */    public static boolean hasHook( Object obj, String methodN ) {	try {	    Method myMethods[]=findMethods( obj.getClass() );	    for( int i=0; i< myMethods.length; i++ ) {		if( methodN.equals ( myMethods[i].getName() )) {		    // check if it's overriden		    Class declaring=myMethods[i].getDeclaringClass();		    Class parentOfDeclaring=declaring.getSuperclass();		    // this works only if the base class doesn't extend		    // another class.		    // if the method is declared in a top level class		    // like BaseInterceptor parent is Object, otherwise		    // parent is BaseInterceptor or an intermediate class		    if( ! "java.lang.Object".			equals(parentOfDeclaring.getName() )) {			return true;		    }		}	    }	} catch ( Exception ex ) {	    ex.printStackTrace();	}	return false;    }    public static void callMain( Class c, String args[] )	throws Exception    {	Class p[]=new Class[1];	p[0]=args.getClass();	Method m=c.getMethod( "main", p);	m.invoke( c, new Object[] {args} );    }        public static Object callMethod1( Object target,				    String methodN,				    Object param1,				    String typeParam1,				    ClassLoader cl)	throws Exception    {	if( target==null || param1==null ) {	    d("Assert: Illegal params " + target + " " + param1 );	}	if( dbg > 0 ) d("callMethod1 " + target.getClass().getName() +			" " + param1.getClass().getName() +			" " + typeParam1 );		Class params[]=new Class[1];	if( typeParam1==null )	    params[0]=param1.getClass();	else	    params[0]=cl.loadClass( typeParam1 );	Method m=findMethod( target.getClass(), methodN, params);	if( m==null )	    throw new NoSuchMethodException(target.getClass().getName() +					    " " + methodN);	return m.invoke(target,  new Object[] {param1 } );    }    public static Object callMethod0( Object target,				    String methodN)	throws Exception    {	if( target==null ) {	    d("Assert: Illegal params " + target );	    return null;	}	if( dbg > 0 )	    d("callMethod0 " + target.getClass().getName() + "." + methodN);		Class params[]=new Class[0];	Method m=findMethod( target.getClass(), methodN, params);	if( m==null )	    throw new NoSuchMethodException(target.getClass().getName() +					    " " + methodN);	return m.invoke(target,  emptyArray );    }        static Object[] emptyArray=new Object[] {};        public static Object callMethodN( Object target,  String methodN,				    Object params[],  Class typeParams[] )	throws Exception    {	Method m=null;	m=findMethod( target.getClass(), methodN, typeParams );        if( m== null ) {	    d("Can't find method " + methodN + " in " +	      target + " CLASS " + target.getClass());	    return null;	}	Object o=m.invoke( target, params );	if(dbg > 0 ) {	    // debug	    StringBuffer sb=new StringBuffer();	    sb.append("" + target.getClass().getName() + "." + methodN + "( " );	    for(int i=0; i<params.length; i++ ) {		if(i>0) sb.append( ", ");		sb.append(params[i]);	    }	    sb.append(")");	    d(sb.toString());	}	return o;    }        // -------------------- Get property --------------------    // This provides a layer of abstraction    public static interface PropertySource {	public String getProperty( String key );	    }    public static interface AttributeHolder {	public void setAttribute( String key, Object o );	    }    // debug --------------------    static final int dbg=0;    static void d(String s ) {	System.out.println("IntrospectionUtils: " + s );    }}

⌨️ 快捷键说明

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