axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From t...@apache.org
Subject cvs commit: xml-axis/java/lib tt-bytecode.jar tt-bytecode.LICENSE
Date Mon, 19 Aug 2002 17:12:11 GMT
tomj        2002/08/19 10:12:10

  Modified:    java/xmls properties.xml targets.xml
               java/src/org/apache/axis/description ServiceDesc.java
  Added:       java/src/org/apache/axis/utils/bytecode ClassReader.java
                        ParamNameExtractor.java ParamReader.java
  Removed:     java/src/org/apache/axis/components/bytecode BCEL.java
                        Builtin.java ClassReader.java Extractor.java
                        ExtractorFactory.java Javap.java ParamReader.java
                        Serp.java TechTrader.java
               java/lib tt-bytecode.jar tt-bytecode.LICENSE
  Log:
  Remove the components.bytecode package, including the Extractor
  and ExtractorFactory interface.  Always use the built in bytecode
  reader, which now lives in the package utils.bytecode.
  
  This removes the dependancy on any jar file (e.g. tt-bytecode, serp, BCEL)
  for reading parameter names from bytecode built with debug.
  
  Update the build.xml files to remove tt-bytecode as a required jar file.
  
  Revision  Changes    Path
  1.1                  xml-axis/java/src/org/apache/axis/utils/bytecode/ClassReader.java
  
  Index: ClassReader.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 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 acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" 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 name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * 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/>.
   */
  
  package org.apache.axis.utils.bytecode;
  
  import org.apache.axis.utils.JavaUtils;
  
  import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.EOFException;
  import java.io.IOException;
  import java.io.InputStream;
  import java.lang.reflect.Constructor;
  import java.lang.reflect.Field;
  import java.lang.reflect.InvocationTargetException;
  import java.lang.reflect.Member;
  import java.lang.reflect.Method;
  import java.util.HashMap;
  import java.util.Map;
  
  /**
   * 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. <p>
   *
   * 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. <p>
   *
   * don't get tricky, it's the bare minimum.  Instances of this class
   * are not threadsafe -- don't share them. <p>
   *
   * @author Edwin Smith, Macromedia
   */
  public class ClassReader extends ByteArrayInputStream {
      // constants values that appear in java class files,
      // from jvm spec 2nd ed, section 4.4, pp 103
      private static final int CONSTANT_Class = 7;
      private static final int CONSTANT_Fieldref = 9;
      private static final int CONSTANT_Methodref = 10;
      private static final int CONSTANT_InterfaceMethodref = 11;
      private static final int CONSTANT_String = 8;
      private static final int CONSTANT_Integer = 3;
      private static final int CONSTANT_Float = 4;
      private static final int CONSTANT_Long = 5;
      private static final int CONSTANT_Double = 6;
      private static final int CONSTANT_NameAndType = 12;
      private static final int CONSTANT_Utf8 = 1;
      /**
       * the constant pool.  constant pool indices in the class file
       * directly index into this array.  The value stored in this array
       * is the position in the class file where that constant begins.
       */
      private int[] cpoolIndex;
      private Object[] cpool;
  
      private Map attrMethods;
  
      /**
       * 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.
       * @param c the class of interest
       * @return a byte array containing the bytecode
       * @throws IOException
       */
      protected static byte[] getBytes(Class c) throws IOException {
          InputStream fin = c.getResourceAsStream('/' + c.getName().replace('.', '/') + ".class");
          try {
              ByteArrayOutputStream out = new ByteArrayOutputStream();
              byte[] buf = new byte[1024];
              int actual;
              do {
                  actual = fin.read(buf);
                  if (actual > 0) {
                      out.write(buf, 0, actual);
                  }
              } while (actual > 0);
              return out.toByteArray();
          } finally {
              fin.close();
          }
      }
  
      static String classDescriptorToName(String desc) {
          return desc.replace('/', '.');
      }
  
      protected static Map findAttributeReaders(Class c) {
          HashMap map = new HashMap();
          Method[] methods = c.getMethods();
  
          for (int i = 0; i < methods.length; i++) {
              String name = methods[i].getName();
              if (name.startsWith("read") && methods[i].getReturnType() == void.class)
{
                  map.put(name.substring(4), methods[i]);
              }
          }
  
          return map;
      }
  
  
      protected static String getSignature(Member method, Class[] paramTypes) {
          // compute the method descriptor
  
          StringBuffer b = new StringBuffer((method instanceof Method) ? method.getName()
: "<init>");
          b.append('(');
  
          for (int i = 0; i < paramTypes.length; i++) {
              addDescriptor(b, paramTypes[i]);
          }
  
          b.append(')');
          if (method instanceof Method) {
              addDescriptor(b, ((Method) method).getReturnType());
          } else if (method instanceof Constructor) {
              addDescriptor(b, void.class);
          }
  
          return b.toString();
      }
  
      private static void addDescriptor(StringBuffer b, Class c) {
          if (c.isPrimitive()) {
              if (c == void.class)
                  b.append('V');
              else if (c == int.class)
                  b.append('I');
              else if (c == boolean.class)
                  b.append('Z');
              else if (c == byte.class)
                  b.append('B');
              else if (c == short.class)
                  b.append('S');
              else if (c == long.class)
                  b.append('J');
              else if (c == char.class)
                  b.append('C');
              else if (c == float.class)
                  b.append('F');
              else if (c == double.class) b.append('D');
          } else if (c.isArray()) {
              b.append('[');
              addDescriptor(b, c.getComponentType());
          } else {
              b.append('L').append(c.getName().replace('.', '/')).append(';');
          }
      }
  
  
      /**
       * @return the next unsigned 16 bit value
       */
      final protected int readShort() {
          return (read() << 8) | read();
      }
  
      /**
       * @return the next signed 32 bit value
       */
      final protected int readInt() {
          return (read() << 24) | (read() << 16) | (read() << 8) | read();
      }
  
      /**
       * skip n bytes in the input stream.
       */
      protected void skipFully(int n) throws IOException {
          while (n > 0) {
              int c = (int) skip(n);
              if (c <= 0)
                  throw new EOFException(JavaUtils.getMessage("unexpectedEOF00"));
              n -= c;
          }
      }
  
      final protected Member resolveMethod(int index) throws IOException, ClassNotFoundException,
NoSuchMethodException {
          int oldPos = pos;
          try {
              Member m = (Member) cpool[index];
              if (m == null) {
                  pos = cpoolIndex[index];
                  Class owner = resolveClass(readShort());
                  NameAndType nt = resolveNameAndType(readShort());
                  String signature = nt.name + nt.type;
                  if (nt.name.equals("<init>")) {
                      Constructor[] ctors = owner.getConstructors();
                      for (int i = 0; i < ctors.length; i++) {
                          String sig = getSignature(ctors[i], ctors[i].getParameterTypes());
                          if (sig.equals(signature)) {
                              cpool[index] = m = ctors[i];
                              return m;
                          }
                      }
                  } else {
                      Method[] methods = owner.getDeclaredMethods();
                      for (int i = 0; i < methods.length; i++) {
                          String sig = getSignature(methods[i], methods[i].getParameterTypes());
                          if (sig.equals(signature)) {
                              cpool[index] = m = methods[i];
                              return m;
                          }
                      }
                  }
                  throw new NoSuchMethodException(signature);
              }
              return m;
          } finally {
              pos = oldPos;
          }
  
      }
  
      final protected Field resolveField(int i) throws IOException, ClassNotFoundException,
NoSuchFieldException {
          int oldPos = pos;
          try {
              Field f = (Field) cpool[i];
              if (f == null) {
                  pos = cpoolIndex[i];
                  Class owner = resolveClass(readShort());
                  NameAndType nt = resolveNameAndType(readShort());
                  cpool[i] = f = owner.getDeclaredField(nt.name);
              }
              return f;
          } finally {
              pos = oldPos;
          }
      }
  
      private static class NameAndType {
          String name;
          String type;
  
          public NameAndType(String name, String type) {
              this.name = name;
              this.type = type;
          }
      }
  
      final protected NameAndType resolveNameAndType(int i) throws IOException {
          int oldPos = pos;
          try {
              NameAndType nt = (NameAndType) cpool[i];
              if (nt == null) {
                  pos = cpoolIndex[i];
                  String name = resolveUtf8(readShort());
                  String type = resolveUtf8(readShort());
                  cpool[i] = nt = new NameAndType(name, type);
              }
              return nt;
          } finally {
              pos = oldPos;
          }
      }
  
  
      final protected Class resolveClass(int i) throws IOException, ClassNotFoundException
{
          int oldPos = pos;
          try {
              Class c = (Class) cpool[i];
              if (c == null) {
                  pos = cpoolIndex[i];
                  String name = resolveUtf8(readShort());
                  cpool[i] = c = Class.forName(classDescriptorToName(name));
              }
              return c;
          } finally {
              pos = oldPos;
          }
      }
  
      final protected String resolveUtf8(int i) throws IOException {
          int oldPos = pos;
          try {
              String s = (String) cpool[i];
              if (s == null) {
                  pos = cpoolIndex[i];
                  int len = readShort();
                  skipFully(len);
                  cpool[i] = s = new String(buf, pos - len, len, "utf-8");
              }
              return s;
          } finally {
              pos = oldPos;
          }
      }
  
      final protected void readCpool() throws IOException {
          int count = readShort(); // cpool count
          cpoolIndex = new int[count];
          cpool = new Object[count];
          for (int i = 1; i < count; i++) {
              int c = read();
              cpoolIndex[i] = super.pos;
              switch (c) // constant pool tag
              {
                  case CONSTANT_Fieldref:
                  case CONSTANT_Methodref:
                  case CONSTANT_InterfaceMethodref:
                  case CONSTANT_NameAndType:
  
                      readShort(); // class index or (12) name index
                      // fall through
  
                  case CONSTANT_Class:
                  case CONSTANT_String:
  
                      readShort(); // string index or class index
                      break;
  
                  case CONSTANT_Long:
                  case CONSTANT_Double:
  
                      readInt(); // hi-value
  
                      // see jvm spec section 4.4.5 - double and long cpool
                      // entries occupy two "slots" in the cpool table.
                      i++;
                      // fall through
  
                  case CONSTANT_Integer:
                  case CONSTANT_Float:
  
                      readInt(); // value
                      break;
  
                  case CONSTANT_Utf8:
  
                      int len = readShort();
                      skipFully(len);
                      break;
  
                  default:
                      // corrupt class file
                      throw new IllegalStateException(
                              JavaUtils.getMessage("unexpectedBytes00"));
              }
          }
      }
  
      final protected void skipAttributes() throws IOException {
          int count = readShort();
          for (int i = 0; i < count; i++) {
              readShort(); // name index
              skipFully(readInt());
          }
      }
  
      /**
       * 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.
       */
      final protected void readAttributes() throws IOException {
          int count = readShort();
          for (int i = 0; i < count; i++) {
              int nameIndex = readShort(); // name index
              int attrLen = readInt();
              int curPos = pos;
  
              String attrName = resolveUtf8(nameIndex);
  
              Method m = (Method) attrMethods.get(attrName);
  
              if (m != null) {
                  try {
                      m.invoke(this, new Object[]{});
                  } catch (IllegalAccessException e) {
                      pos = curPos;
                      skipFully(attrLen);
                  } catch (InvocationTargetException e) {
                      try {
                          throw e.getTargetException();
                      } catch (Error ex) {
                          throw ex;
                      } catch (RuntimeException ex) {
                          throw ex;
                      } catch (IOException ex) {
                          throw ex;
                      } catch (Throwable ex) {
                          pos = curPos;
                          skipFully(attrLen);
                      }
                  }
              } else {
                  // don't care what attribute this is
                  skipFully(attrLen);
              }
          }
      }
  
      /**
       * read a code attribute
       * @throws IOException
       */
      public void readCode() throws IOException {
          readShort(); // max stack
          readShort(); // max locals
          skipFully(readInt()); // code
          skipFully(8 * readShort()); // exception table
  
          // read the code attributes (recursive).  This is where
          // we will find the LocalVariableTable attribute.
          readAttributes();
      }
  
      protected ClassReader(byte buf[], Map attrMethods) {
          super(buf);
  
          this.attrMethods = attrMethods;
      }
  }
  
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/bytecode/ParamNameExtractor.java
  
  Index: ParamNameExtractor.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 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 acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" 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 name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * 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/>.
   */
  package org.apache.axis.utils.bytecode;
  
  import org.apache.axis.components.logger.LogFactory;
  import org.apache.axis.utils.JavaUtils;
  import org.apache.commons.logging.Log;
  
  import java.io.IOException;
  import java.lang.reflect.Method;
  import java.util.Hashtable;
  
  /**
   *  This class retieves function parameter names from bytecode built with
   * debugging symbols.  Used as a last resort when creating WSDL.
   *
   * @author <a href="mailto:tomj@macromedia.com">Tom Jordahl</a>
   */
  public class ParamNameExtractor {
  
      protected static Log log =
              LogFactory.getLog(ParamNameExtractor.class.getName());
  
      /**
       * Cache of ParamReader objects which correspond to particular
       * Java classes.
       *
       * !!! NOTE : AT PRESENT WE DO NOT CLEAN UP THIS CACHE.
       */
      private static Hashtable paramCache = new Hashtable();
  
      /**
       * Retrieve a list of function parameter names from a method
       * Returns null if unable to read parameter names (i.e. bytecode not
       * built with debug).
       */
      public static String[] getParameterNamesFromDebugInfo(Method method) {
          // Don't worry about it if there are no params.
          int numParams = method.getParameterTypes().length;
          if (numParams == 0)
              return null;
  
          // get declaring class
          Class c = method.getDeclaringClass();
          
          // Try to obtain a ParamReader class object from cache
          ParamReader pr = (ParamReader) paramCache.get(c);
  
          if (pr == null) {
              try {
                  // get a parameter reader
                  pr = new ParamReader(c);
                  // cache it
                  paramCache.put(c, pr);
              } catch (IOException e) {
                  // log it and leave
                  log.info(JavaUtils.getMessage("error00") + ":" + e);
                  return null;
              }
          }
  
          // get the paramter names
          String[] names = pr.getParameterNames(method);
  
          return names;
      }
  }
  
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/bytecode/ParamReader.java
  
  Index: ParamReader.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 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 acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" 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 name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * 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/>.
   */
  package org.apache.axis.utils.bytecode;
  
  import org.apache.axis.utils.JavaUtils;
  
  import java.io.IOException;
  import java.lang.reflect.Method;
  import java.lang.reflect.Modifier;
  import java.util.HashMap;
  import java.util.Map;
  
  /**
   * 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. <p>
   *
   * 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. <p>
   *
   * don't get tricky, it's the bare minimum.  Instances of this class
   * are not threadsafe -- don't share them. <p>
   *
   * @author Edwin Smith, Macromedia
   */
  public class ParamReader
          extends ClassReader {
      private String methodName;
      private Map methods = new HashMap();
      private Class[] paramTypes;
  
      /**
       * process a class file, given it's class.  We'll use the defining
       * classloader to locate the bytecode.
       * @param c
       * @throws IOException
       */
      public ParamReader(Class c) throws IOException {
          this(getBytes(c));
      }
  
      /**
       * process the given class bytes directly.
       * @param b
       * @throws IOException
       */
      public ParamReader(byte[] b) throws IOException {
          super(b, findAttributeReaders(ParamReader.class));
  
          // check the magic number
          if (readInt() != 0xCAFEBABE) {
              // not a class file!
              throw new IOException(JavaUtils.getMessage("badClassFile00"));
          }
  
          readShort(); // minor version
          readShort(); // major version
  
          readCpool(); // slurp in the constant pool
  
          readShort(); // access flags
          readShort(); // this class name
          readShort(); // super class name
  
          int count = readShort(); // ifaces count
          for (int i = 0; i < count; i++) {
              readShort(); // interface index
          }
  
          count = readShort(); // fields count
          for (int i = 0; i < count; i++) {
              readShort(); // access flags
              readShort(); // name index
              readShort(); // descriptor index
              skipAttributes(); // field attributes
          }
  
          count = readShort(); // methods count
          for (int i = 0; i < count; i++) {
              readShort(); // access flags
              int m = readShort(); // name index
              String name = resolveUtf8(m);
              int d = readShort(); // descriptor index
              this.methodName = name + resolveUtf8(d);
              readAttributes(); // method attributes
          }
  
      }
  
      /**
       * return the names of the declared parameters for the given method.
       * If we cannot determine the names, return null.  The returned array will
       * have one name per parameter.  The length of the array will be the same
       * as the length of the Class[] array returned by Method.getParameterTypes().
       * @param method
       * @return String[] array of names, one per parameter, or null
       */
      public String[] getParameterNames(Method method) {
          paramTypes = method.getParameterTypes();
  
          // look up the names for this method
          String[] localNames = (String[]) methods.get(getSignature(method, paramTypes));
  
          // we know all the local variable names, but we only need to return
          // the names of the parameters.
  
          if (localNames != null) {
              String[] paramNames = new String[paramTypes.length];
              int j = Modifier.isStatic(method.getModifiers()) ? 0 : 1;
  
              for (int i = 0; i < paramNames.length; i++) {
                  paramNames[i] = localNames[j++];
                  if (paramTypes[i] == double.class || paramTypes[i] == long.class) {
                      // skip a slot for 64bit params
                      j++;
                  }
              }
  
              return paramNames;
          } else {
              return null;
          }
      }
  
      /**
       * this is invoked when a LocalVariableTable attribute is encountered.
       * @throws IOException
       */
      public void readLocalVariableTable() throws IOException {
          int len = readShort(); // table length
          String[] names = null;
          if (methods != null && methodName != null) {
              // need enough room in the table to handle double-wide parameters
              names = new String[2 * len];
              methods.put(methodName, names);
          }
          for (int j = 0; j < len; j++) {
              readShort(); // start pc
              readShort(); // length
              int n = readShort(); // name_index
              readShort(); // descriptor_index
              int index = readShort(); // index
  
              if (names != null) {
                  names[index] = resolveUtf8(n);
              }
          }
      }
  
  }
  
  
  
  1.18      +0 -1      xml-axis/java/xmls/properties.xml
  
  Index: properties.xml
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/xmls/properties.xml,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- properties.xml	9 Aug 2002 19:14:36 -0000	1.17
  +++ properties.xml	19 Aug 2002 17:12:10 -0000	1.18
  @@ -41,7 +41,6 @@
   <property name="commons-logging.jar" location="${lib.dir}/commons-logging.jar"/>
   <property name="commons-discovery.jar" location="${lib.dir}/commons-discovery.jar"/>
   <property name="log4j-core.jar" location="${lib.dir}/log4j-1.2.4.jar"/>
  -<property name="tt-bytecode.jar" location="${lib.dir}/tt-bytecode.jar"/>
   <property name="junit.jar" location="${lib.dir}/junit.jar"/>
   
   <!-- this jar is only in the test lib dir -->
  
  
  
  1.14      +0 -13     xml-axis/java/xmls/targets.xml
  
  Index: targets.xml
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/xmls/targets.xml,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- targets.xml	16 Aug 2002 20:43:13 -0000	1.13
  +++ targets.xml	19 Aug 2002 17:12:10 -0000	1.14
  @@ -81,18 +81,6 @@
         classname="org.apache.log4j.Category"
         classpathref="classpath"/>
   
  -    <available property="tt-bytecode.present"
  -      classname="com.techtrader.modules.tools.bytecode.BCClass"
  -      classpathref="classpath"/>
  -
  -    <available property="serp.present"
  -      classname="serp.bytecode.Project"
  -      classpathref="classpath"/>
  -
  -    <available property="bcel.present"
  -      classname="org.apache.bcel.classfile.JavaClass"
  -      classpathref="classpath"/>
  -
       <available property="activation.present"
         classname="javax.activation.DataHandler"
         classpathref="classpath"/>
  @@ -164,7 +152,6 @@
       <echo message="commons-logging.present=${commons-logging.present}" />
       <echo message="commons-discovery.present=${commons-discovery.present}" />
       <echo message="log4j.present=${log4j.present}" />
  -    <echo message="tt-bytecode.present=${tt-bytecode.present}" />
       <echo message="activation.present=${activation.present}" />
       <echo message=""/>
       <echo message="--- Optional Libraries ---" />
  
  
  
  1.47      +15 -17    xml-axis/java/src/org/apache/axis/description/ServiceDesc.java
  
  Index: ServiceDesc.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/description/ServiceDesc.java,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -u -r1.46 -r1.47
  --- ServiceDesc.java	9 Aug 2002 13:56:24 -0000	1.46
  +++ ServiceDesc.java	19 Aug 2002 17:12:10 -0000	1.47
  @@ -54,6 +54,20 @@
    */
   package org.apache.axis.description;
   
  +import org.apache.axis.AxisServiceConfig;
  +import org.apache.axis.components.logger.LogFactory;
  +import org.apache.axis.encoding.DefaultTypeMappingImpl;
  +import org.apache.axis.encoding.TypeMapping;
  +import org.apache.axis.encoding.TypeMappingRegistry;
  +import org.apache.axis.encoding.TypeMappingRegistryImpl;
  +import org.apache.axis.enum.Style;
  +import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.utils.bytecode.ParamNameExtractor;
  +import org.apache.axis.wsdl.Skeleton;
  +import org.apache.commons.logging.Log;
  +
  +import javax.xml.namespace.QName;
  +import javax.xml.rpc.holders.Holder;
   import java.lang.reflect.InvocationTargetException;
   import java.lang.reflect.Method;
   import java.lang.reflect.Modifier;
  @@ -64,22 +78,6 @@
   import java.util.List;
   import java.util.StringTokenizer;
   
  -import javax.xml.namespace.QName;
  -import javax.xml.rpc.holders.Holder;
  -
  -import org.apache.axis.encoding.TypeMapping;
  -import org.apache.axis.encoding.TypeMappingRegistry;
  -import org.apache.axis.encoding.TypeMappingRegistryImpl;
  -import org.apache.axis.encoding.DefaultTypeMappingImpl;
  -import org.apache.axis.enum.Style;
  -import org.apache.axis.utils.JavaUtils;
  -import org.apache.axis.components.bytecode.ExtractorFactory;
  -import org.apache.axis.wsdl.Skeleton;
  -
  -import org.apache.axis.components.logger.LogFactory;
  -import org.apache.axis.AxisServiceConfig;
  -import org.apache.commons.logging.Log;
  -
   
   /**
    * A ServiceDesc is an abstract description of a service.
  @@ -917,7 +915,7 @@
           operation.setReturnType(tm.getTypeQName(method.getReturnType()));
   
           String [] paramNames =
  -                ExtractorFactory.getExtractor().getParameterNamesFromDebugInfo(method);
  +                ParamNameExtractor.getParameterNamesFromDebugInfo(method);
   
           for (int k = 0; k < paramTypes.length; k++) {
               Class type = paramTypes[k];
  
  
  

Mime
View raw message