org.apache.axis.utils.cache.JavaClass Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2001-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 org.apache.axis.utils.cache;
import java.lang.reflect.Method;
import java.util.Hashtable;
import java.io.Serializable;
/**
* A simple cache of previously loaded classes, and their methods.
*
* @author Sam Ruby
*/
public class JavaClass implements Serializable {
private static Hashtable classes = new Hashtable();
private Hashtable methods = new Hashtable();
private Class jc;
/**
* Find (or create if necessary) a JavaClass associated with a given
* class
*/
public static synchronized JavaClass find(Class jc) {
JavaClass result = (JavaClass) classes.get(jc);
if (result == null) {
result = new JavaClass(jc);
classes.put(jc, result);
}
return result;
}
/**
* Create a cache entry for this java.lang.Class
*/
public JavaClass(Class jc) {
this.jc = jc;
classes.put(jc, this);
}
/**
* Return the java.lang.Class associated with this entry
*/
public Class getJavaClass() {
return jc;
}
/**
* Lookup a method based on name. This method returns an array just in
* case there is more than one.
* @param name name of method
*/
public Method[] getMethod(String name) {
JavaMethod jm = (JavaMethod) methods.get(name);
if (jm == null) {
methods.put(name, jm=new JavaMethod(jc, name));
}
return jm.getMethod();
}
};