dims        02/04/02 11:07:17

  Modified:    java     build.xml
               java/src/org/apache/axis/description ServiceDesc.java
               java/src/org/apache/axis/utils JavaUtils.java
               java/src/org/apache/axis/wsdl/fromJava ClassRep.java
  Added:       java/src/org/apache/axis/utils/bytecode Extractor.java
                        ExtractorFactory.java TechTrader.java
  Log:
  Break out code that uses ttbytecode.jar into a "component" such that a typical 
client won't need it in his classpath. (Since this is used mainly for introspection on 
the server-side).
  
  Revision  Changes    Path
  1.127     +1 -0      xml-axis/java/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/build.xml,v
  retrieving revision 1.126
  retrieving revision 1.127
  diff -u -r1.126 -r1.127
  --- build.xml 19 Mar 2002 15:42:01 -0000      1.126
  +++ build.xml 2 Apr 2002 19:07:16 -0000       1.127
  @@ -237,6 +237,7 @@
         <exclude name="**/org/apache/axis/transport/http/AxisServlet.java" 
unless="servlet.present"/>
         <exclude name="**/org/apache/axis/server/JNDIAxisServerFactory.java" 
unless="servlet.present"/>
         <exclude name="**/org/apache/axis/security/servlet/*" 
unless="servlet.present"/>
  +      <exclude name="**/org/apache/axis/utils/bytecode/TechTrader*" 
unless="tt-bytecode.present"/>
         <exclude name="**/javax/xml/soap/*.java" unless="attachments.present"/>
         <exclude name="**/javax/xml/rpc/handler/soap/*.java" 
unless="attachments.present"/>
         <exclude name="**/*TestSuite.java" unless="junit.present"/>
  
  
  
  1.12      +3 -2      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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- ServiceDesc.java  1 Apr 2002 20:12:16 -0000       1.11
  +++ ServiceDesc.java  2 Apr 2002 19:07:16 -0000       1.12
  @@ -55,6 +55,7 @@
   package org.apache.axis.description;
   
   import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.utils.bytecode.ExtractorFactory;
   import org.apache.axis.encoding.TypeMapping;
   import org.apache.axis.encoding.TypeMappingRegistry;
   import org.apache.axis.wsdl.Skeleton;
  @@ -611,8 +612,8 @@
           operation.setReturnType(tm.getTypeQName(method.getReturnType()));
   
           Class [] paramTypes = method.getParameterTypes();
  -        String [] paramNames =
  -                JavaUtils.getParameterNamesFromDebugInfo(method);
  +        String [] paramNames = 
  +                
ExtractorFactory.getExtractor().getParameterNamesFromDebugInfo(method);
   
           for (int k = 0; k < paramTypes.length; k++) {
               Class type = paramTypes[k];
  
  
  
  1.39      +1 -97     xml-axis/java/src/org/apache/axis/utils/JavaUtils.java
  
  Index: JavaUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/JavaUtils.java,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- JavaUtils.java    29 Mar 2002 22:13:05 -0000      1.38
  +++ JavaUtils.java    2 Apr 2002 19:07:17 -0000       1.39
  @@ -55,33 +55,19 @@
   
   package org.apache.axis.utils;
   
  +import org.apache.axis.encoding.Hex;
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   
   import java.lang.reflect.Array;
   import java.lang.reflect.Field;
  -import java.lang.reflect.Method;
  -
   import java.text.Collator;
   import java.text.MessageFormat;
  -
   import java.util.Arrays;
  -import java.util.HashMap;
   import java.util.List;
   import java.util.Locale;
   import java.util.MissingResourceException;
   import java.util.ResourceBundle;
  -import java.util.Hashtable;
  -import java.util.Vector;
  -import java.io.IOException;
  -
  -import org.apache.axis.encoding.Hex;
  -import com.techtrader.modules.tools.bytecode.BCClass;
  -import com.techtrader.modules.tools.bytecode.BCMethod;
  -import com.techtrader.modules.tools.bytecode.Code;
  -import com.techtrader.modules.tools.bytecode.LocalVariableTableAttribute;
  -import com.techtrader.modules.tools.bytecode.Constants;
  -import com.techtrader.modules.tools.bytecode.LocalVariable;
   
   /** Utility class to deal with Java language related issues, such
    * as type conversions.
  @@ -160,14 +146,6 @@
       }
   
       /**
  -     * Cache of tt-bytecode BCClass objects which correspond to particular
  -     * Java classes.
  -     *
  -     * !!! NOTE : AT PRESENT WE DO NOT CLEAN UP THIS CACHE.
  -     */
  -    private static Hashtable ttClassCache = new Hashtable();
  -
  -    /**
        * It the argument to the convert(...) method implements
        * the ConvertCache interface, the convert(...) method
        * will use the set/get methods to store and retrieve
  @@ -879,78 +857,4 @@
           return false;
       }
   
  -    /**
  -     * Get Parameter Names using tt-bytecode
  -     *
  -     * @param method the Java method we're interested in
  -     * @return list of names or null
  -     */
  -    public static String[] getParameterNamesFromDebugInfo(Method method) {
  -        Class c = method.getDeclaringClass();
  -        int numParams = method.getParameterTypes().length;
  -        Vector temp = new Vector();
  -
  -        // Don't worry about it if there are no params.
  -        if (numParams == 0)
  -            return null;
  -
  -        // Try to obtain a tt-bytecode class object
  -        BCClass bclass = (BCClass)ttClassCache.get(c);
  -
  -        if(bclass == null) {
  -            try {
  -                bclass = new BCClass(c);
  -                ttClassCache.put(c, bclass);
  -            } catch (IOException e) {
  -                // what now?
  -            }
  -        }
  -
  -        // Obtain the exact method we're interested in.
  -        BCMethod bmeth = bclass.getMethod(method.getName(),
  -                                          method.getParameterTypes());
  -
  -        if (bmeth == null)
  -            return null;
  -
  -        // Get the Code object, which contains the local variable table.
  -        Code code = bmeth.getCode();
  -        if (code == null)
  -            return null;
  -
  -        LocalVariableTableAttribute attr =
  -                
(LocalVariableTableAttribute)code.getAttribute(Constants.ATTR_LOCALS);
  -
  -        if (attr == null)
  -            return null;
  -
  -        // OK, found it.  Now scan through the local variables and record
  -        // the names in the right indices.
  -        LocalVariable [] vars = attr.getLocalVariables();
  -
  -        String [] argNames = new String[numParams + 1];
  -        argNames[0] = null; // don't know return name
  -
  -        // NOTE: we scan through all the variables here, because I have been
  -        // told that jikes sometimes produces unpredictable ordering of the
  -        // local variable table.
  -        for (int j = 0; j < vars.length; j++) {
  -            LocalVariable var = vars[j];
  -            if (! var.getName().equals("this")) {
  -                if(temp.size() < var.getIndex() + 1)
  -                    temp.setSize(var.getIndex() + 1);
  -                temp.setElementAt(var.getName(), var.getIndex());
  -            }
  -        }
  -        int k = 0;
  -        for (int j = 0; j < temp.size(); j++) {
  -            if (temp.elementAt(j) != null) {
  -                k++;
  -                argNames[k] = (String)temp.elementAt(j);
  -                if(k + 1 == argNames.length)
  -                    break;
  -            }
  -        }
  -        return argNames;
  -    }
   }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/bytecode/Extractor.java
  
  Index: Extractor.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 [EMAIL PROTECTED]
   *
   * 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 java.lang.reflect.Method;
  
  /**
   * This class defines a Extractor interface.
   * @author <a href="mailto:[EMAIL PROTECTED]";>Davanum Srinivas</a>
   * @version $Revision: 1.1 $ $Date: 2002/04/02 19:07:17 $
   */
  public interface Extractor {
      public String[] getParameterNamesFromDebugInfo(Method method);
  }
  
  
  
  1.1                  
xml-axis/java/src/org/apache/axis/utils/bytecode/ExtractorFactory.java
  
  Index: ExtractorFactory.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 [EMAIL PROTECTED]
   *
   * 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 org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
  /**
   * This class implements a factory to instantiate bytecode Extractor.
   * @author <a href="mailto:[EMAIL PROTECTED]";>Davanum Srinivas</a>
   * @version $Revision: 1.1 $ $Date: 2002/04/02 19:07:17 $
   */
  public class ExtractorFactory {
      protected static Log log =
              LogFactory.getLog(ExtractorFactory.class.getName());
  
      public static Extractor getExtractor() {
          String extractorClassName =
                  
System.getProperty("axis.Extractor","org.apache.axis.utils.bytecode.TechTrader");
          log.debug("axis.Extractor:" + extractorClassName);
          Extractor extractor = null;
          try {
              Class extractorClass = Class.forName(extractorClassName);
              if (Extractor.class.isAssignableFrom(extractorClass))
                  return (Extractor) extractorClass.newInstance();
          } catch (Exception e) {
              // If something goes wrong here, should we just fall
              // through and use the default one?
              log.error(JavaUtils.getMessage("exception00"), e);
          }
          return extractor;
      }
  }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/bytecode/TechTrader.java
  
  Index: TechTrader.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 [EMAIL PROTECTED]
   *
   * 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 com.techtrader.modules.tools.bytecode.BCClass;
  import com.techtrader.modules.tools.bytecode.BCMethod;
  import com.techtrader.modules.tools.bytecode.Code;
  import com.techtrader.modules.tools.bytecode.LocalVariableTableAttribute;
  import com.techtrader.modules.tools.bytecode.Constants;
  import com.techtrader.modules.tools.bytecode.LocalVariable;
  
  import java.lang.reflect.Method;
  import java.util.Vector;
  import java.util.Hashtable;
  import java.io.IOException;
  
  /**
   * This class implements an Extractor using "TechTrader Bytecode Toolkit"
   * from <a href="http://tt-bytecode.sourceforge.net/";>tt-bytecode</a>
   * @author <a href="mailto:[EMAIL PROTECTED]";>Davanum Srinivas</a>
   * @version $Revision: 1.1 $ $Date: 2002/04/02 19:07:17 $
   */
  public class TechTrader implements Extractor {
  
      /**
       * Cache of tt-bytecode BCClass objects which correspond to particular
       * Java classes.
       *
       * !!! NOTE : AT PRESENT WE DO NOT CLEAN UP THIS CACHE.
       */
      private static Hashtable ttClassCache = new Hashtable();
  
      /**
       * Get Parameter Names using tt-bytecode
       *
       * @param method the Java method we're interested in
       * @return list of names or null
       */
      public String[] getParameterNamesFromDebugInfo(Method method) {
          Class c = method.getDeclaringClass();
          int numParams = method.getParameterTypes().length;
          Vector temp = new Vector();
  
          // Don't worry about it if there are no params.
          if (numParams == 0)
              return null;
  
          // Try to obtain a tt-bytecode class object
          BCClass bclass = (BCClass)ttClassCache.get(c);
  
          if(bclass == null) {
              try {
                  bclass = new BCClass(c);
                  ttClassCache.put(c, bclass);
              } catch (IOException e) {
                  // what now?
              }
          }
  
          // Obtain the exact method we're interested in.
          BCMethod bmeth = bclass.getMethod(method.getName(),
                                            method.getParameterTypes());
  
          if (bmeth == null)
              return null;
  
          // Get the Code object, which contains the local variable table.
          Code code = bmeth.getCode();
          if (code == null)
              return null;
  
          LocalVariableTableAttribute attr =
                  
(LocalVariableTableAttribute)code.getAttribute(Constants.ATTR_LOCALS);
  
          if (attr == null)
              return null;
  
          // OK, found it.  Now scan through the local variables and record
          // the names in the right indices.
          LocalVariable [] vars = attr.getLocalVariables();
  
          String [] argNames = new String[numParams + 1];
          argNames[0] = null; // don't know return name
  
          // NOTE: we scan through all the variables here, because I have been
          // told that jikes sometimes produces unpredictable ordering of the
          // local variable table.
          for (int j = 0; j < vars.length; j++) {
              LocalVariable var = vars[j];
              if (! var.getName().equals("this")) {
                  if(temp.size() < var.getIndex() + 1)
                      temp.setSize(var.getIndex() + 1);
                  temp.setElementAt(var.getName(), var.getIndex());
              }
          }
          int k = 0;
          for (int j = 0; j < temp.size(); j++) {
              if (temp.elementAt(j) != null) {
                  k++;
                  argNames[k] = (String)temp.elementAt(j);
                  if(k + 1 == argNames.length)
                      break;
              }
          }
          return argNames;
      }
  }
  
  
  
  1.27      +94 -102   xml-axis/java/src/org/apache/axis/wsdl/fromJava/ClassRep.java
  
  Index: ClassRep.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/ClassRep.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- ClassRep.java     1 Apr 2002 20:12:17 -0000       1.26
  +++ ClassRep.java     2 Apr 2002 19:07:17 -0000       1.27
  @@ -54,31 +54,21 @@
    */
   package org.apache.axis.wsdl.fromJava;
   
  -import com.techtrader.modules.tools.bytecode.BCClass;
  -import com.techtrader.modules.tools.bytecode.BCMethod;
  -import com.techtrader.modules.tools.bytecode.Code;
  -import com.techtrader.modules.tools.bytecode.Constants;
  -import com.techtrader.modules.tools.bytecode.LocalVariable;
  -import com.techtrader.modules.tools.bytecode.LocalVariableTableAttribute;
   import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.utils.bytecode.ExtractorFactory;
   import org.apache.axis.wsdl.Skeleton;
   
  -import java.io.IOException;
  +import javax.xml.rpc.ParameterMode;
   import java.lang.reflect.Field;
   import java.lang.reflect.Method;
   import java.lang.reflect.Modifier;
   import java.util.HashMap;
  -import java.util.Vector;
   import java.util.List;
  -import java.util.HashMap;
  -
  -import org.apache.axis.utils.JavaUtils;
  -import org.apache.axis.wsdl.Skeleton;
  -import javax.xml.rpc.ParameterMode;
  +import java.util.Vector;
   
   /**
    * ClassRep is the representation of a class used inside the Java2WSDL
  - * emitter.  The information in the ClassRep can be changed by 
  + * emitter.  The information in the ClassRep can be changed by
    * user provided code to affect the emitted wsdl file.
    *
    * If you wish to change the functionality (for example change the
  @@ -88,20 +78,20 @@
    *      and provide new build(...) methods that construct MyClassRep objects.
    *   3) Extend the DefaultFactory class (MyFactory) so that it locates your new 
Builder classes.
    *   4) Provide MyFactory as an option when your invoke Java2WSDL.
  - *            
  - *             name  
  + *
  + *             name
    * ClassRep +-+---------> String
    *  | | | | | |
    *  | | | | | | isIntf
    *  | | | | | +---------> boolean
  - *  | | | | | 
  + *  | | | | |
    *  | | | | | modifiers
    *  | | | | +-----------> int (use java.lang.reflect.Modifier to decode)
  - *  | | | |  
  - *  | | | | super 
  + *  | | | |
  + *  | | | | super
    *  | | | +-------------> ClassRep
  - *  | | |  
  - *  | | | interfaces 
  + *  | | |
  + *  | | | interfaces
    *  | | +---------------> ClassRep(s)
    *  | |
    *  | | methods
  @@ -133,7 +123,7 @@
    *
    *           name
    *  ParamRep -----------> String
  - *      | |  
  + *      | |
    *      | |  type
    *      | +-------------> Class
    *      |
  @@ -148,11 +138,11 @@
    *       +--------------> Class
    *
    * Note: all classes extend BaseRep where meta data information can be stored.
  - * 
  + *
    * @author Rich Scheuerle  ([EMAIL PROTECTED])
    */
   public class ClassRep extends BaseRep {
  -    
  +
       private String   _name       = "";
       private boolean  _isInterface= false;
       private int      _modifiers  = 0;  // Use java.lang.reflect.Modifer to decode
  @@ -162,11 +152,11 @@
       private Vector   _fields     = new Vector();
       private HashMap  _fieldNames = new HashMap();
       private List     _stopList    = null;
  -    
  +
       /**
        * Constructor
        * Create an empty ClassRep
  -     */ 
  +     */
       public ClassRep() {
       }
   
  @@ -179,10 +169,10 @@
        *                   the declared methods are put in the list
        * @param stopList An optional vector of class names which if inhMethods
        *                    is true, will stop the inheritence search if encountered.
  -     * @param implClass  This is an optional parameter which is a 
  +     * @param implClass  This is an optional parameter which is a
        *                   class that implements or extends cls.  The
        *                   implClass is used to obtain parameter names.
  -     */ 
  +     */
       public ClassRep(Class cls, boolean inhMethods, List stopList) {
           init(cls, inhMethods, stopList, null);
       }
  @@ -200,7 +190,7 @@
           if (isClassOk(superClass)) {
               _super = new ClassRep(superClass, inhMethods, _stopList);
           }
  -        
  +
           // Add the interfaces
           for (int i=0; i < cls.getInterfaces().length; i++) {
               _interfaces.add(new ClassRep(cls.getInterfaces()[i], inhMethods, 
_stopList));
  @@ -231,15 +221,15 @@
       public void     setFields(Vector v)      { _fields = v; }
   
       /**
  -     * Adds MethodReps to the ClassRep. 
  -     * @param cls the Class    
  +     * Adds MethodReps to the ClassRep.
  +     * @param cls the Class
        * @param inhMethods if true, then the methods array will contain
        *                   methods declared and/or inherited else only
  -     *                   the declared methods are put in the list           
  +     *                   the declared methods are put in the list
        * @param implClass  This is an optional parameter which is a
        *                   class that implements or extends cls.  The
  -     *                   implClass is used to obtain parameter names.            
  -     */ 
  +     *                   implClass is used to obtain parameter names.
  +     */
       protected void addMethods(Class cls, boolean inhMethods, Class implClass) {
           // Constructs a vector of all the public methods
   
  @@ -254,14 +244,14 @@
           Class[] interfaces = cls.getInterfaces();
           for (int i=0; i < interfaces.length; i++) {
               walkInheritanceChain(interfaces[i], inhMethods, implClass);
  -        } 
  -        
  +        }
  +
           return;
       }
   
       /**
        * Return true if we should process this class
  -     */ 
  +     */
       private boolean isClassOk(Class clazz) {
           if (clazz == null)
               return false;
  @@ -277,7 +267,7 @@
               if (name.startsWith("java.") || name.startsWith("javax."))
                   return false;
           }
  -        
  +
           // Didn't find a reason to reject this class
           return true;
       }
  @@ -286,13 +276,13 @@
       /**
        * Iterate up the inheritance chain and construct the list of methods
        * Appends to the _methods class variable.
  -     */ 
  -    private void walkInheritanceChain(Class cls, 
  -                                      boolean inhMethods, 
  +     */
  +    private void walkInheritanceChain(Class cls,
  +                                      boolean inhMethods,
                                         Class implClass) {
           Method[] m;
           Class currentClass = cls;
  -        
  +
           while (isClassOk(currentClass)) {
   
               // get the methods in this class
  @@ -317,12 +307,12 @@
                       _methods.add(methodRep);
                   }
               }
  -            
  +
               // if we don't want inherited methods, don't walk the chain
               if (!inhMethods) {
                   break;
               }
  -            
  +
               // move up the inhertance chain
               currentClass = currentClass.getSuperclass();
           }
  @@ -345,11 +335,11 @@
   
       /**
        * Adds FieldReps to the ClassRep.
  -     * @param cls the Class    
  +     * @param cls the Class
        * A complexType component element will be generated for each FieldRep.
        * This implementation generates FieldReps for public data fields and
        * also for properties exposed by java bean accessor methods.
  -     */ 
  +     */
       protected void addFields(Class cls) {
   
           // Constructs a FieldRep for every public field and
  @@ -406,7 +396,7 @@
                           _fieldNames.put(name.toLowerCase(), fr);
                       }
                   }
  -                
  +
               }
           }
           return;
  @@ -416,9 +406,9 @@
        * Get the list of parameter types for the specified method.
        * This implementation uses the specified type unless it is a holder class,
        * in which case the held type is used.
  -     * @param method is the Method.                          
  -     * @return array of parameter types.                                      
  -     */ 
  +     * @param method is the Method.
  +     * @return array of parameter types.
  +     */
       protected Class[] getParameterTypes(Method method) {
           Class[] types = new Class[method.getParameterTypes().length];
           for (int i=0; i < method.getParameterTypes().length; i++) {
  @@ -438,28 +428,29 @@
        * parameter names from the class file.  If parameter names are not
        * available for the method (perhaps the method is in an interface), the
        * corresponding method in the implClass is queried.
  -     * @param method is the Method to search.                
  -     * @param implClass  If the first search fails, the corresponding  
  -     *                   Method in this class is searched.           
  +     * @param method is the Method to search.
  +     * @param implClass  If the first search fails, the corresponding
  +     *                   Method in this class is searched.
        * @return array of Strings which represent the return name followed by 
parameter names
  -     */ 
  +     */
       protected String[] getParameterNames(Method method, Class implClass) {
           String[] paramNames = null;
  -        
  +
           paramNames = getParameterNamesFromSkeleton(method);
           if (paramNames != null) {
               return paramNames;
           }
  -        
  -        paramNames = JavaUtils.getParameterNamesFromDebugInfo(method); 
  -        
  +
  +        paramNames =
  +                
ExtractorFactory.getExtractor().getParameterNamesFromDebugInfo(method);
  +
           // If failed, try getting a method of the impl class.
           if (paramNames == null && implClass != null) {
               Method m = null;
               try {
                   m = implClass.getDeclaredMethod(method.getName(), 
method.getParameterTypes());
               } catch (Exception e) {}
  -            if (m == null) { 
  +            if (m == null) {
                   try {
                       m = implClass.getMethod(method.getName(), 
method.getParameterTypes());
                   } catch (Exception e) {}
  @@ -469,9 +460,10 @@
                   if (paramNames != null) {
                       return paramNames;
                   }
  -                paramNames = JavaUtils.getParameterNamesFromDebugInfo(m); 
  +                paramNames =
  +                    
ExtractorFactory.getExtractor().getParameterNamesFromDebugInfo(method);
               }
  -        }            
  +        }
   
           return paramNames;
       }
  @@ -479,17 +471,17 @@
       /**
        * Get the list of parameter names for the specified method.
        * This implementation uses Skeleton.getParameterNames to get the parameter 
names
  -     * from the class file.  If parameter names are not available, returns null. 
  -     * @param method is the Method to search.                
  +     * from the class file.  If parameter names are not available, returns null.
  +     * @param method is the Method to search.
        * @return array of Strings which represent the return name followed by 
parameter names
  -     */ 
  +     */
       protected String[] getParameterNamesFromSkeleton(Method method) {
           String[] paramNames = null;
           Class cls = method.getDeclaringClass();
           Class skel = Skeleton.class;
           if (!cls.isInterface() && skel.isAssignableFrom(cls)) {
               try {
  -                // Use the getParameterNameStatic method so that we don't have to 
new up 
  +                // Use the getParameterNameStatic method so that we don't have to 
new up
                   // an object.
                   Method getParameterName = cls.getMethod("getParameterNameStatic",
                                                            new Class [] 
{String.class, int.class});
  @@ -504,8 +496,8 @@
                   int numNames = method.getParameterTypes().length + 1; // Parms + 
return
                   paramNames = new String[numNames];
                   for (int i=0; i < numNames; i++) {
  -                    paramNames[i] = (String) getParameterName.invoke(skelObj, 
  -                                                                     new Object[] 
{method.getName(), 
  +                    paramNames[i] = (String) getParameterName.invoke(skelObj,
  +                                                                     new Object[] 
{method.getName(),
                                                                                      
new Integer(i-1)});
                   }
               } catch (Exception e) {
  @@ -518,29 +510,29 @@
       /**
        * Get the list of return/parameter modes for the specified method.
        * This implementation uses Skeleton.getParameterModes to get the modes
  -     * If parameter modes are not available 
  +     * If parameter modes are not available
        * for the method (perhaps the method is in an interface), the
        * corresponding method in the implClass is queried.
  -     * @param method is the Method to search.                
  -     * @param implClass  If the first search fails, the corresponding  
  -     *                   Method in this class is searched.           
  +     * @param method is the Method to search.
  +     * @param implClass  If the first search fails, the corresponding
  +     *                   Method in this class is searched.
        * @return array of Strings which represent the return mode followed by 
parameter modes
  -     */ 
  +     */
       protected ParameterMode[] getParameterModes(Method method, Class implClass) {
           ParameterMode[] paramModes = null;
  -        
  +
           paramModes = getParameterModesFromSkeleton(method);
           if (paramModes != null) {
               return paramModes;
           }
  -                
  +
           // If failed, try getting a method of the impl class
           if (paramModes == null && implClass != null) {
               Method m = null;
               try {
                   m = implClass.getDeclaredMethod(method.getName(), 
method.getParameterTypes());
               } catch (Exception e) {}
  -            if (m == null) { 
  +            if (m == null) {
                   try {
                       m = implClass.getMethod(method.getName(), 
method.getParameterTypes());
                   } catch (Exception e) {}
  @@ -548,7 +540,7 @@
               if (m != null) {
                   paramModes = getParameterModesFromSkeleton(m);
               }
  -        }            
  +        }
   
           if (paramModes == null) {
               paramModes = getParameterModes(method);
  @@ -560,17 +552,17 @@
       /**
        * Get the list of return/parameter modes for the specified method.
        * This implementation uses Skeleton.getParameterModes to get the parameter 
modes
  -     * from the class file.  If parameter modes are not available, returns null. 
  -     * @param method is the Method to search.                
  +     * from the class file.  If parameter modes are not available, returns null.
  +     * @param method is the Method to search.
        * @return array of Strings which represent the return mode followed by 
parameter modes
  -     */ 
  +     */
       protected ParameterMode[] getParameterModesFromSkeleton(Method method) {
           ParameterMode[] paramModes = null;
           Class cls = method.getDeclaringClass();
           Class skel = Skeleton.class;
           if (!cls.isInterface() && skel.isAssignableFrom(cls)) {
               try {
  -                // Use the getParameterModeStatic method so that we don't have to 
new up 
  +                // Use the getParameterModeStatic method so that we don't have to 
new up
                   // an object.
                   Method getParameterMode = cls.getMethod("getParameterModeStatic",
                                                            new Class [] 
{String.class, int.class});
  @@ -585,8 +577,8 @@
                   int numModes = method.getParameterTypes().length + 1; // Parms + 
return
                   paramModes = new ParameterMode[numModes];
                   for (int i=0; i < numModes; i++) {
  -                    paramModes[i] = (ParameterMode) 
getParameterMode.invoke(skelObj, 
  -                                                                     new Object[] 
{method.getName(), 
  +                    paramModes[i] = (ParameterMode) getParameterMode.invoke(skelObj,
  +                                                                     new Object[] 
{method.getName(),
                                                                                      
new Integer(i-1)});
                   }
               } catch (Exception e) {
  @@ -598,9 +590,9 @@
       /**
        * Get the list of return/parameter modes for the specified method.
        * This default implementation assumes IN unless the type is a holder class
  -     * @param method is the Method.                          
  -     * @return array of parameter modes.                                      
  -     */ 
  +     * @param method is the Method.
  +     * @return array of parameter modes.
  +     */
       protected ParameterMode[] getParameterModes(Method method) {
           ParameterMode[] modes = new 
ParameterMode[method.getParameterTypes().length+1];
           modes[0] = ParameterMode.OUT;
  @@ -617,25 +609,25 @@
   
   
       /**
  -     * Gets additional meta data and sets it on the MethodRep.            
  -     * @param methodRep is the target MethodRep.                
  -     * @param method is the Method to search.                
  -     * @param implClass  If the first search fails, the corresponding  
  -     *                   Method in this class is searched.           
  -     */ 
  +     * Gets additional meta data and sets it on the MethodRep.
  +     * @param methodRep is the target MethodRep.
  +     * @param method is the Method to search.
  +     * @param implClass  If the first search fails, the corresponding
  +     *                   Method in this class is searched.
  +     */
       protected void getMethodMetaData(MethodRep methodRep, Method method, Class 
implClass) {
  -        
  +
           if (getMethodMetaDataFromSkeleton(methodRep, method)) {
               return;
           }
  -                
  +
           // If failed, try getting a method of the impl class
           if (implClass != null) {
               Method m = null;
               try {
                   m = implClass.getDeclaredMethod(method.getName(), 
method.getParameterTypes());
               } catch (Exception e) {}
  -            if (m == null) { 
  +            if (m == null) {
                   try {
                       m = implClass.getMethod(method.getName(), 
method.getParameterTypes());
                   } catch (Exception e) {}
  @@ -643,17 +635,17 @@
               if (m != null) {
                   getMethodMetaDataFromSkeleton(methodRep, m);
               }
  -        }            
  +        }
           return;
       }
   
   
       /**
  -     * Gets additional meta data and sets it on the MethodRep.            
  -     * @param methodRep is the target MethodRep.                
  -     * @param method is the Method to search.               
  +     * Gets additional meta data and sets it on the MethodRep.
  +     * @param methodRep is the target MethodRep.
  +     * @param method is the Method to search.
        * @return true if the method is part of a skeleton.
  -     */ 
  +     */
       protected boolean getMethodMetaDataFromSkeleton(MethodRep methodRep, Method 
method) {
           Class cls = method.getDeclaringClass();
           Class skel = Skeleton.class;
  @@ -702,7 +694,7 @@
       protected boolean isJavaBeanNormal(Class cls, String name, Class type) {
           if ((name == null) || (name.length() == 0))
               return false;
  -        
  +
           try {
               String propName = name.substring(0,1).toUpperCase()
                   + name.substring(1);
  @@ -723,7 +715,7 @@
               mod = m.getModifiers();
               if (!Modifier.isPublic(mod)) {
                   return false;
  -            }       
  +            }
           }
           catch (NoSuchMethodException ex) {
               return false;
  @@ -764,7 +756,7 @@
               mod = m.getModifiers();
               if (!Modifier.isPublic(mod)) {
                   return false;
  -            }       
  +            }
           }
           catch (NoSuchMethodException ex) {
               return false;
  
  
  


Reply via email to