interface Cookie {
}
class FortuneCookie implements Cookie{
public static Cookie newCookie(String
str)
{
System.out.println("Fortunate
" + str);
return new FortuneCookie();
}
}
class MisFortuneCookie implements Cookie{
public static Cookie newCookie(String
str)
{
System.out.println("UnFortunate
" + str);
return new MisFortuneCookie();
}
}
Listing 2: CookieFactory.java
import java.lang.*;
import java.lang.reflect.*;
public class CookieFactory {
// Instantiate a Cookie represented
by the
// input String parameter.
public Cookie createCookie(String
className)
{
// Get the class corresponding
from String
Class c = null;
try {
c =
Class.forName(className);
}
catch (ClassNotFoundException
cnfe) {
cnfe.printStackTrace();
}
// Parameters for the "printCookie()"
method
// of the Cookie interface.
Class pTypes[] = new Class[1];
pTypes[0] = String.class;
// Get "printCookie()"
method for Cookie class
Method method = null;
try {
method = c.getMethod("newCookie",
pTypes);
}
catch (NoSuchMethodException
nsme) {
nsme.printStackTrace();
}
// Invoke "printCookie()"
method to get Cookie
Cookie cookie = null;
try {
Object[] params
= new Object[1];
params[0]
= "Cookie";
cookie = (Cookie)(method.invoke(c,
params));
}
catch (InvocationTargetException
ite) {
ite.getTargetException().printStackTrace();
}
catch (IllegalAccessException
iae) {
iae.printStackTrace();
}
return cookie;
}
// Simple test for the Cookie Factory
public static void main(String[] args)
{
CookieFactory cf = new
CookieFactory();
Cookie fc = cf.createCookie("FortuneCookie");
Cookie mfc = cf.createCookie("MisFortuneCookie");
}
}
Listing 3: XRayBean.java
import java.lang.reflect.*;
import java.beans.*;
import java.util.*;
public class XRayBean {
public Method[]
getMethodsFromBean(BeanInfo
bi) {
Method[]
mList;
MethodDescriptor[] mDescriptorList;
mDescriptorList = bi.getMethodDescriptors();
mList = new Method[mDescriptorList.length];
for (int i = 0; i <
mDescriptorList.length; i++) {
mList[i] =
mDescriptorList[i].getMethod();
}
return mList;
}
public PropertyDescriptor[]
getPropsFromBean(BeanInfo
bi) {
PropertyDescriptor[] pDescriptorList;
pDescriptorList =
bi.getPropertyDescriptors();
return pDescriptorList;
}
public EventSetDescriptor[]
getEventsFromBean(BeanInfo
bi) {
EventSetDescriptor[] eDescriptorList;
eDescriptorList =
bi.getEventSetDescriptors();
return eDescriptorList;
}
public Method[]
getListenerMethods(EventSetDescriptor
esd) {
Method mList[];
mList = esd.getListenerMethods();
return mList;
}
public static void main(String[] args)
{
XRayBean xray = new XRayBean();
if (args.length != 2) {
System.out.println("Usage:
java XRayClass " +
"<className>
[methods | properties | events]");
System.exit(1);
}
try {
Class c
= Class.forName(args[0]);
BeanInfo bi
= Introspector.getBeanInfo(c);
if (args[1].equals("methods"))
{
Method[] mList = xray.getMethodsFromBean(bi);
for (int i = 0; i < mList.length; i++) {
System.out.println("Method["
+ i +
"]: " + mList[i]);
}
}
else if (args[1].equals("properties"))
{
PropertyDescriptor[]
pList =
xray.getPropsFromBean(bi);
for (int i = 0; i < pList.length; i++) {
System.out.println(
"---------------------------------");
System.out.println("Property Name: " +
pList[i].getName());
System.out.println("Read
Method[" +
i + "]: " + pList[i].getReadMethod());
System.out.println("Write
Method[" +
i + "]: " + pList[i].getWriteMethod());
}
}
else if (args[1].equals("events"))
{
EventSetDescriptor[]
eList =
xray.getEventsFromBean(bi);
for (int i = 0; i < eList.length; i++) {
System.out.println(
"--------------------------------");
System.out.println("Event Name: " +
eList[i].getName());
Method
mList[] =
xray.getListenerMethods(eList[i]);
for (int j = 0; j < mList.length; j++) {
System.out.println("Listener Method[" +
j + "]: " + mList[j]);
}
}
}
else {
System.out.println("ERROR:" +
"The selected feature is not implemented");
}
}
catch (java.lang.ClassNotFoundException
e) {
e.printStackTrace();
}
catch (java.beans.IntrospectionException
e) {
e.printStackTrace();
}
}
}
Listing 4: XRayClass.java
import java.lang.reflect.*;
import java.util.*;
public class XRayClass {
public Method[]
getLocalMethodsFromClass(Class
c) {
Method[] mList;
mList = c.getDeclaredMethods();
return mList;
}
public Method[]
getAllMethodsFromClass(Class
c) {
Method[] mList;
mList = c.getMethods();
return mList;
}
public Constructor[]
getAllConstructorsFromClass(Class
c) {
Constructor[] cList;
cList = c.getDeclaredConstructors();
return cList;
}
public Field[] getFieldsFromClass(Class
c) {
Field[] fList;
fList = c.getDeclaredFields();
return fList;
}
public Class[] getClassesFromClass(Class
c) {
Vector cList = new Vector();
Class cTemp;
Class[] aList;
cTemp = c;
while ((cTemp =
cTemp.getSuperclass()) != null) {
cList.addElement(cTemp);
}
aList = new Class[cList.size()];
for (int i = 0; i <
cList.size(); i++) {
aList[i] =
(Class) cList.elementAt(i);
}
return aList;
}
public Class[]
getInterfacesFromClass(Class
c) {
Class[] cList;
cList = c.getInterfaces();
return cList;
}
public static void main(String[] args) {
XRayClass xray = new XRayClass();
if (args.length != 2) {
System.out.println("Usage:
" +
"java XRayClass <className>" +
"[localMethods | allMethods | " +
"Constructors | fields | inheritance |" +
"interfaces] ");
System.exit(1);
}
try {
Class c =
Class.forName(args[0]);
if (args[1].equals("localMethods"))
{
Method[] mList =
xray.getLocalMethodsFromClass(c);
for (int i = 0; i < mList.length; i++) {
System.out.println("Method["
+ i +
"]: " + mList[i]);
}
}
else if (args[1].equals("allMethods"))
{
Method[] mList =
xray.getAllMethodsFromClass(c);
for (int i = 0; i < mList.length; i++) {
System.out.println("Method["
+ i +
"]: " + mList[i]);
}
}
else if (args[1].equals("Constructors"))
{
Constructor[] cList
=
xray.getAllConstructorsFromClass(c);
for (int i = 0; i < cList.length; i++) {
System.out.println("Constructor["
+ i + "]: " + cList[i]);
}
}
else if (args[1].equals("fields"))
{
Field[] fList =
xray.getFieldsFromClass(c);
for (int i = 0; i < fList.length; i++) {
System.out.println("Field["
+ i +
"]: " + fList[i]);
}
}
else if (args[1].equals("inheritance"))
{
Class[] cList =
xray.getClassesFromClass(c);
for (int i = 0; i < cList.length; i++) {
System.out.println("Class["
+ i +
"]: " + cList[i]);
}
}
else if (args[1].equals("interfaces"))
{
Class[] cList =
xray.getInterfacesFromClass(c);
for (int i = 0; i < cList.length; i++) {
System.out.println("Interface[" + i +
"]: " + cList[i]);
}
}
else {
System.out.println("ERROR:"
+
"The
selected feature is not implemented");
}
}
catch (java.lang.ClassNotFoundException
e) {
e.printStackTrace();
}