org.apache.axis.utils.bytecode
Class ClassReader

java.lang.Object
  |
  +--java.io.InputStream
        |
        +--java.io.ByteArrayInputStream
              |
              +--org.apache.axis.utils.bytecode.ClassReader
Direct Known Subclasses:
ParamReader

public class ClassReader
extends java.io.ByteArrayInputStream

This is the class file reader for obtaining the parameter names for declared methods in a class. The class must have debugging attributes for us to obtain this information.

This does not work for inherited methods. To obtain parameter names for inherited methods, you must use a paramReader for the class that originally declared the method.

don't get tricky, it's the bare minimum. Instances of this class are not threadsafe -- don't share them.

Author:
Edwin Smith, Macromedia

Field Summary
 
Fields inherited from class java.io.ByteArrayInputStream
buf, count, mark, pos
 
Constructor Summary
protected ClassReader(byte[] buf, java.util.Map attrMethods)
           
 
Method Summary
protected static java.util.Map findAttributeReaders(java.lang.Class c)
           
protected static byte[] getBytes(java.lang.Class c)
          load the bytecode for a given class, by using the class's defining classloader and assuming that for a class named P.C, the bytecodes are in a resource named /P/C.class.
protected static java.lang.String getSignature(java.lang.reflect.Member method, java.lang.Class[] paramTypes)
           
protected  void readAttributes()
          read an attributes array.
 void readCode()
          read a code attribute
protected  void readCpool()
           
protected  int readInt()
           
protected  int readShort()
           
protected  java.lang.Class resolveClass(int i)
           
protected  java.lang.reflect.Field resolveField(int i)
           
protected  java.lang.reflect.Member resolveMethod(int index)
           
protected  org.apache.axis.utils.bytecode.ClassReader.NameAndType resolveNameAndType(int i)
           
protected  java.lang.String resolveUtf8(int i)
           
protected  void skipAttributes()
           
protected  void skipFully(int n)
          skip n bytes in the input stream.
 
Methods inherited from class java.io.ByteArrayInputStream
available, close, mark, markSupported, read, read, reset, skip
 
Methods inherited from class java.io.InputStream
read
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ClassReader

protected ClassReader(byte[] buf,
                      java.util.Map attrMethods)
Method Detail

getBytes

protected static byte[] getBytes(java.lang.Class c)
                          throws java.io.IOException
load the bytecode for a given class, by using the class's defining classloader and assuming that for a class named P.C, the bytecodes are in a resource named /P/C.class.

Parameters:
c - the class of interest
Returns:
a byte array containing the bytecode
Throws:
java.io.IOException

findAttributeReaders

protected static java.util.Map findAttributeReaders(java.lang.Class c)

getSignature

protected static java.lang.String getSignature(java.lang.reflect.Member method,
                                               java.lang.Class[] paramTypes)

readShort

protected final int readShort()
Returns:
the next unsigned 16 bit value

readInt

protected final int readInt()
Returns:
the next signed 32 bit value

skipFully

protected void skipFully(int n)
                  throws java.io.IOException
skip n bytes in the input stream.

java.io.IOException

resolveMethod

protected final java.lang.reflect.Member resolveMethod(int index)
                                                throws java.io.IOException,
                                                       java.lang.ClassNotFoundException,
                                                       java.lang.NoSuchMethodException
java.io.IOException
java.lang.ClassNotFoundException
java.lang.NoSuchMethodException

resolveField

protected final java.lang.reflect.Field resolveField(int i)
                                              throws java.io.IOException,
                                                     java.lang.ClassNotFoundException,
                                                     java.lang.NoSuchFieldException
java.io.IOException
java.lang.ClassNotFoundException
java.lang.NoSuchFieldException

resolveNameAndType

protected final org.apache.axis.utils.bytecode.ClassReader.NameAndType resolveNameAndType(int i)
                                                                                   throws java.io.IOException
java.io.IOException

resolveClass

protected final java.lang.Class resolveClass(int i)
                                      throws java.io.IOException,
                                             java.lang.ClassNotFoundException
java.io.IOException
java.lang.ClassNotFoundException

resolveUtf8

protected final java.lang.String resolveUtf8(int i)
                                      throws java.io.IOException
java.io.IOException

readCpool

protected final void readCpool()
                        throws java.io.IOException
java.io.IOException

skipAttributes

protected final void skipAttributes()
                             throws java.io.IOException
java.io.IOException

readAttributes

protected final void readAttributes()
                             throws java.io.IOException
read an attributes array. the elements of a class file that can contain attributes are: fields, methods, the class itself, and some other types of attributes.

java.io.IOException

readCode

public void readCode()
              throws java.io.IOException
read a code attribute

Throws:
java.io.IOException


Copyright © 2003 Apache Web Services Project. All Rights Reserved.