Yep, I've gotten right around 35 out of 400 every run.... Perhaps that's to do with 
the fact that I'm on a multi-processor machine or something (and hence the threads 
spawn faster?).  I'll try it from home later and see what happens.

--Glen

> -----Original Message-----
> From: Russell Butek [mailto:[EMAIL PROTECTED]]
> Sent: Monday, April 01, 2002 3:41 PM
> To: [EMAIL PROTECTED]
> Subject: Re: cvs commit: xml-axis/java/test/wsdl/multithread
> MultithreadTestCase.java
> 
> 
> Glen, you say you have a low # of multithread threads that 
> succeed.  How
> many?  I get:
> 
>    [junit] Had 328 successes (of a possible 400)
> 
> and thereabouts (though I've also gotten as few as 40; don't 
> know why).
> There WILL be a certain # of failures because the test is 
> just throwing
> lots of calls simultaneously across the wire and the socket 
> itself will
> panic and throw back a certain # of those.  If there are too 
> many failures,
> then this test may not be testing anything of value.
> 
> Russell Butek
> [EMAIL PROTECTED]
> 
> 
> [EMAIL PROTECTED] on 04/01/2002 02:12:17 PM
> 
> Please respond to [EMAIL PROTECTED]
> 
> To:    [EMAIL PROTECTED]
> cc:
> Subject:    cvs commit: xml-axis/java/test/wsdl/multithread
>        MultithreadTestCase.java
> 
> 
> 
> gdaniels    02/04/01 12:12:17
> 
>   Modified:    java/src/org/apache/axis/deployment/wsdd 
> WSDDService.java
>                java/src/org/apache/axis/description OperationDesc.java
>                         ServiceDesc.java
>                java/src/org/apache/axis/encoding
>                         SerializationContextImpl.java
>                java/src/org/apache/axis/encoding/ser 
> BeanSerializer.java
>                java/src/org/apache/axis/providers/java 
> JavaProvider.java
>                java/src/org/apache/axis/wsdl Skeleton.java
>                java/src/org/apache/axis/wsdl/fromJava
>                         BuilderPortTypeClassRep.java ClassRep.java
>                         DefaultBuilderPortTypeClassRep.java 
> Emitter.java
>                         ExceptionRep.java Types.java
>                java/src/org/apache/axis/wsdl/toJava 
> JavaSkelWriter.java
>                java/test/wsdl/multithread MultithreadTestCase.java
>   Added:       java/src/org/apache/axis/description FaultDesc.java
>   Log:
>   * Most of the switchover for the Java2WSDL Emitter to use
>   org.apache.axis.
>     description.* metadata has been done and works.
> 
>   * Skeletons are now emitted using 
> org.apache.axis.description.* metadata,
>     and the runtime updated to use that information if available.
> 
>   * Added FaultDesc for faults, disallowedMethods, SOAPAction, and
>     stopClasses to
>     metadata.
> 
>   * When we're using an implementation class, all the methods 
> that could
>     possibly
>     be available will be in ancestor classes (since they must 
> implement all
>     the
>     appropriate interfaces).  If we're using Java2WSDL to point at an
>     Interface,
>     however, we need to walk the interface's interfaces to 
> correctly catch
>     all
>     the parental methods.  Revamp the inheritance code to 
> handle this, as
>     well as
>     being more correct about superclasses.
> 
>   * We need the ServiceDesc to "resolve" completely at 
> various points, for
>     instance:
>        1) When a listing of ServiceDescs is requested from an
>        EngineConfiguration
>        2) When a service is instantiated in the engine, 
> either for a call
>        or
>           for automatic WSDL generation
>        3) When Java2WSDL is used
> 
>     Basically the only variable in these situations is what 
> classloader to
>     use
>     to resolve the class name.  I'd like to have a single 
> place where we do
>     this,
>     but it should be the RIGHT place.
> 
>     WARNING : Right now the Class.forName() call in 
> WSDDService is probably
>     NOT
>     going to work in servlet engines.  I'd like to get this 
> resolved ASAP.
> 
>   * Clean up various JavaDoc inconsistencies (go IDEA!)
> 
>   * Print TypeMapping, not SerializationContextImpl, in debug message
> 
>   * Count successful invocations for the multi-threaded test 
> case, so we
>     can see
>     what's going on.  Also put the number of threads into a 
> variable to
>     make it
>     easier to tweak.  I think the very low # of successes 
> (for me anyway)
>     warrants some investigation.
> 
>   Revision  Changes    Path
>   1.49      +2 -2
>   xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDService.java
> 
>   Index: WSDDService.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WS
> DDService.java,v
> 
>   retrieving revision 1.48
>   retrieving revision 1.49
>   diff -u -r1.48 -r1.49
>   --- WSDDService.java  29 Mar 2002 00:05:42 -0000    1.48
>   +++ WSDDService.java  1 Apr 2002 20:12:16 -0000     1.49
>   @@ -182,8 +182,8 @@
>    // This is likely no good - need to figure out which 
> classloader to use
>    // and load the class when needed (for instance when the 
> ServiceDesc is
>    // requested....  --Glen
>   -//                Class cls = Class.forName(className);
>   -//                desc.setImplClass(cls);
>   +                Class cls = Class.forName(className);
>   +                desc.setImplClass(cls);
>                    initTMR();
>                    String encStyle = Constants.URI_SOAP_ENC;
>                    desc.setTypeMapping
>                    ((TypeMapping)tmr.getTypeMapping(encStyle));
> 
> 
> 
>   1.7       +26 -0
>   xml-axis/java/src/org/apache/axis/description/OperationDesc.java
> 
>   Index: OperationDesc.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/description/Operat
> ionDesc.java,v
> 
>   retrieving revision 1.6
>   retrieving revision 1.7
>   diff -u -r1.6 -r1.7
>   --- OperationDesc.java      31 Mar 2002 04:15:31 -0000    1.6
>   +++ OperationDesc.java      1 Apr 2002 20:12:16 -0000     1.7
>   @@ -100,6 +100,12 @@
>        /** The number of "in" params (i.e. IN or INOUT) for 
> this operation
>        */
>        private int numInParams = 0;
> 
>   +    /** A unique SOAPAction value for this operation */
>   +    private String soapAction = null;
>   +
>   +    /** Faults for this operation */
>   +    private ArrayList faults = null;
>   +
>        /**
>         * Default constructor.
>         */
>   @@ -171,6 +177,14 @@
>            this.parent = parent;
>        }
> 
>   +    public String getSoapAction() {
>   +        return soapAction;
>   +    }
>   +
>   +    public void setSoapAction(String soapAction) {
>   +        this.soapAction = soapAction;
>   +    }
>   +
>        public void setStyle(int style)
>        {
>            this.style = new Integer(style);
>   @@ -299,6 +313,18 @@
>                }
>            }
>            return result;
>   +    }
>   +
>   +    public void addFault(FaultDesc fault)
>   +    {
>   +        if (faults == null)
>   +            faults = new ArrayList();
>   +        faults.add(fault);
>   +    }
>   +
>   +    public ArrayList getFaults()
>   +    {
>   +        return faults;
>        }
>    }
> 
> 
> 
> 
>   1.11      +98 -11
>   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/Servic
> eDesc.java,v
> 
>   retrieving revision 1.10
>   retrieving revision 1.11
>   diff -u -r1.10 -r1.11
>   --- ServiceDesc.java  31 Mar 2002 04:15:31 -0000    1.10
>   +++ ServiceDesc.java  1 Apr 2002 20:12:16 -0000     1.11
>   @@ -63,8 +63,10 @@
>    import java.util.ArrayList;
>    import java.util.HashMap;
>    import java.util.Iterator;
>   +import java.util.List;
>    import java.lang.reflect.Method;
>    import java.lang.reflect.InvocationTargetException;
>   +import java.lang.reflect.Field;
> 
>    /**
>     * A ServiceDesc is an abstract description of a service.
>   @@ -91,6 +93,9 @@
>        /** null allows everything, an empty ArrayList allows 
> nothing */
>        private ArrayList allowedMethods = null;
> 
>   +    /** List if disallowed methods */
>   +    private List disallowedMethods = null;
>   +
>        /** Style */
>        private int style = STYLE_RPC;
> 
>   @@ -125,6 +130,9 @@
>        /** Cached copy of the skeleton 
> "getParameterDescStatic" method */
>        private Method skelMethod = null;
> 
>   +    /** Classes at which we should stop looking up the 
> inheritance chain
>   */
>   +    private ArrayList stopClasses = null;
>   +
>        /** Lookup caches */
>        private HashMap name2OperationsMap = null;
>        private HashMap qname2OperationMap = null;
>   @@ -209,6 +217,22 @@
>            this.name = name;
>        }
> 
>   +    public ArrayList getStopClasses() {
>   +        return stopClasses;
>   +    }
>   +
>   +    public void setStopClasses(ArrayList stopClasses) {
>   +        this.stopClasses = stopClasses;
>   +    }
>   +
>   +    public List getDisallowedMethods() {
>   +        return disallowedMethods;
>   +    }
>   +
>   +    public void setDisallowedMethods(List disallowedMethods) {
>   +        this.disallowedMethods = disallowedMethods;
>   +    }
>   +
>        public void addOperationDesc(OperationDesc operation)
>        {
>            operations.add(operation);
>   @@ -236,7 +260,7 @@
> 
>        public OperationDesc [] getOperationsByName(String methodName)
>        {
>   -        getSyncedOperationsForName(methodName);
>   +        getSyncedOperationsForName(implClass, methodName);
> 
>            if (name2OperationsMap == null)
>                return null;
>   @@ -259,7 +283,7 @@
>            // If we need to load up operations from 
> introspection data, do
>            it.
>            // This returns fast if we don't need to do 
> anything, so it's
>            not very
>            // expensive.
>   -        getSyncedOperationsForName(methodName);
>   +        getSyncedOperationsForName(implClass, methodName);
> 
>            if (name2OperationsMap == null)
>                return null;
>   @@ -375,8 +399,11 @@
> 
>            // Didn't find a match.  Try the superclass, if appropriate
>            Class superClass = implClass.getSuperclass();
>   -        if (!superClass.getName().startsWith("java.") &&
>   -                !superClass.getName().startsWith("javax.")) {
>   +        if (superClass != null &&
>   +                !superClass.getName().startsWith("java.") &&
>   +                !superClass.getName().startsWith("javax.") &&
>   +                (stopClasses == null ||
>   +                          
> !stopClasses.contains(superClass.getName())))
>   {
>                syncOperationToClass(oper, superClass);
>            }
>        }
>   @@ -387,18 +414,46 @@
>         */
>        public void loadServiceDescByIntrospection()
>        {
>   +        loadServiceDescByIntrospection(implClass, true);
>   +
>   +        // Setting this to null means there is nothing 
> more to do, and
>   it
>   +        // avoids future string compares.
>   +        completedNames = null;
>   +    }
>   +    /**
>   +     * Fill in a service description by introspecting the 
> implementation
>   +     * class.
>   +     */
>   +    public void loadServiceDescByIntrospection(Class 
> implClass, boolean
>   searchParents)
>   +    {
>            if (implClass == null)
>                return;
> 
>            Method [] methods = implClass.getDeclaredMethods();
> 
>            for (int i = 0; i < methods.length; i++) {
>   -            getSyncedOperationsForName(methods[i].getName());
>   +            getSyncedOperationsForName(implClass, 
> methods[i].getName());
>            }
> 
>   -        // Setting this to null means there is nothing 
> more to do, and
>   it
>   -        // avoids future string compares.
>   -        completedNames = null;
>   +        if (implClass.isInterface()) {
>   +            Class [] superClasses = implClass.getInterfaces();
>   +            for (int i = 0; i < superClasses.length; i++) {
>   +                Class superClass = superClasses[i];
>   +                if (stopClasses == null ||
>   +                        
> !stopClasses.contains(superClass.getName())) {
>   +                    
> loadServiceDescByIntrospection(superClass, true);
>   +                }
>   +            }
>   +        } else {
>   +            Class superClass = implClass.getSuperclass();
>   +            if (superClass != null &&
>   +                    !superClass.getName().startsWith("java.") &&
>   +                    !superClass.getName().startsWith("javax.") &&
>   +                    (stopClasses == null ||
>   +                        
> !stopClasses.contains(superClass.getName()))) {
>   +                loadServiceDescByIntrospection(superClass, true);
>   +            }
>   +        }
>        }
> 
>        /**
>   @@ -418,7 +473,7 @@
>         * Makes sure we have completely synchronized 
> OperationDescs with
>         * the implementation class.
>         */
>   -    private void getSyncedOperationsForName(String methodName)
>   +    private void getSyncedOperationsForName(Class implClass, String
>   methodName)
>        {
>            // If we have no implementation class, don't worry about it
>            (we're
>            // probably on the client)
>   @@ -434,6 +489,10 @@
>                !allowedMethods.contains(methodName))
>                return;
> 
>   +        if ((disallowedMethods != null) &&
>   +            disallowedMethods.contains(methodName))
>   +            return;
>   +
>            // If we're a skeleton class, make sure we don't 
> already have
>            any
>            // OperationDescs for this name (as that might 
> cause conflicts),
>            // then load them up from the Skeleton class.
>   @@ -520,7 +579,8 @@
>            }
> 
>            Class superClass = implClass.getSuperclass();
>   -        if (!superClass.getName().startsWith("java.") &&
>   +        if (superClass != null &&
>   +                !superClass.getName().startsWith("java.") &&
>                    !superClass.getName().startsWith("javax.")) {
>                createOperationsForName(superClass, methodName);
>            }
>   @@ -546,7 +606,8 @@
>            OperationDesc operation = new OperationDesc();
>            operation.setName(method.getName());
>            operation.setMethod(method);
>   -        operation.setReturnClass(method.getReturnType());
>   +        Class retClass = method.getReturnType();
>   +        operation.setReturnClass(retClass);
>            
> operation.setReturnType(tm.getTypeQName(method.getReturnType
>            ()));
> 
>            Class [] paramTypes = method.getParameterTypes();
>   @@ -577,6 +638,32 @@
>                    paramDesc.setTypeQName(tm.getTypeQName(type));
>                }
>                operation.addParameter(paramDesc);
>   +        }
>   +
>   +        // Create Exception Types
>   +        Class[] exceptionTypes = new Class[method.getExceptionTypes
>   ().length];
>   +        exceptionTypes = method.getExceptionTypes();
>   +
>   +        for (int i=0; i < exceptionTypes.length; i++) {
>   +            // Every remote method declares a 
> java.rmi.RemoteException
>   +            if (exceptionTypes[i] != 
> java.rmi.RemoteException.class) {
>   +                Field[] f = exceptionTypes[i].getDeclaredFields();
>   +                ArrayList exceptionParams = new ArrayList();
>   +                for (int j = 0; j < f.length; j++) {
>   +                    QName qname = new QName("", f[j].getName());
>   +                    QName typeQName = 
> tm.getTypeQName(f[j].getType());
>   +                    ParameterDesc param = new ParameterDesc(qname,
>   +
>   ParameterDesc.IN,
>   +                                                           
>  typeQName);
>   +                    param.setJavaType(f[j].getType());
>   +                    exceptionParams.add(param);
>   +                }
>   +                String pkgAndClsName = exceptionTypes[i].getName();
>   +                FaultDesc fault = new FaultDesc();
>   +                fault.setName(pkgAndClsName);
>   +                fault.setParameters(exceptionParams);
>   +                operation.addFault(fault);
>   +            }
>            }
> 
>            addOperationDesc(operation);
> 
> 
> 
>   1.1
>   xml-axis/java/src/org/apache/axis/description/FaultDesc.java
> 
>   Index: FaultDesc.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.description;
> 
>   import javax.xml.rpc.namespace.QName;
>   import java.util.ArrayList;
> 
>   /**
>    *
>    * @author Glen Daniels ([EMAIL PROTECTED])
>    */
>   public class FaultDesc {
>       private QName qname;
>       private ArrayList parameters;
> 
>       public QName getQName() {
>           return qname;
>       }
> 
>       public void setQName(QName name) {
>           this.qname = name;
>       }
> 
>       public String getName()
>       {
>           if (qname != null)
>               return qname.getLocalPart();
>           return null;
>       }
> 
>       public void setName(String name)
>       {
>           qname = new QName("", name);
>       }
> 
>       public ArrayList getParameters() {
>           return parameters;
>       }
> 
>       public void setParameters(ArrayList parameters) {
>           this.parameters = parameters;
>       }
>   }
> 
> 
> 
>   1.15      +1 -1
>   
> xml-axis/java/src/org/apache/axis/encoding/SerializationContex
> tImpl.java
> 
>   Index: SerializationContextImpl.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/encoding/Serializa
> tionContextImpl.java,v
> 
>   retrieving revision 1.14
>   retrieving revision 1.15
>   diff -u -r1.14 -r1.15
>   --- SerializationContextImpl.java 31 Mar 2002 23:09:33 -0000    1.14
>   +++ SerializationContextImpl.java 1 Apr 2002 20:12:16 -0000     1.15
>   @@ -902,7 +902,7 @@
>                }
> 
>                throw new 
> IOException(JavaUtils.getMessage("noSerializer00",
>   -                    value.getClass().getName(), "" + this));
>   +                    value.getClass().getName(), "" + tm));
>            }
>            // !!! Write out a generic null, or get type info 
> from somewhere
>            else?
>        }
> 
> 
> 
>   1.24      +13 -32
>   xml-axis/java/src/org/apache/axis/encoding/ser/BeanSerializer.java
> 
>   Index: BeanSerializer.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanS
> erializer.java,v
> 
>   retrieving revision 1.23
>   retrieving revision 1.24
>   diff -u -r1.23 -r1.24
>   --- BeanSerializer.java     28 Mar 2002 18:41:16 -0000    1.23
>   +++ BeanSerializer.java     1 Apr 2002 20:12:16 -0000     1.24
>   @@ -55,51 +55,33 @@
> 
>    package org.apache.axis.encoding.ser;
> 
>   -import org.xml.sax.Attributes;
>   -import org.xml.sax.SAXException;
>   -import org.xml.sax.helpers.AttributesImpl;
>   -
>   -import javax.xml.rpc.namespace.QName;
>   -import java.io.IOException;
>   -
>   +import org.apache.axis.AxisFault;
>    import org.apache.axis.Constants;
>   -import org.apache.axis.encoding.Serializer;
>   -import org.apache.axis.encoding.SerializerFactory;
>   -import org.apache.axis.encoding.SerializationContext;
>   -import org.apache.axis.encoding.Deserializer;
>   -import org.apache.axis.encoding.DeserializerFactory;
>   -import org.apache.axis.encoding.DeserializationContext;
>   -import org.apache.axis.encoding.DeserializerImpl;
>    import org.apache.axis.InternalException;
>   -import org.apache.axis.AxisFault;
>   -import org.apache.axis.description.TypeDesc;
>    import org.apache.axis.description.FieldDesc;
>   +import org.apache.axis.description.TypeDesc;
>   +import org.apache.axis.encoding.SerializationContext;
>   +import org.apache.axis.encoding.Serializer;
>    import org.apache.axis.utils.JavaUtils;
>    import org.apache.axis.wsdl.fromJava.ClassRep;
>    import org.apache.axis.wsdl.fromJava.FieldRep;
>    import org.apache.axis.wsdl.fromJava.Types;
>   -import org.apache.axis.wsdl.toJava.Utils;
>   -
>    import org.apache.commons.logging.Log;
>    import org.apache.commons.logging.LogFactory;
>   -
>   -import java.io.Serializable;
>   -import java.lang.reflect.Method;
>   -import java.lang.reflect.InvocationTargetException;
>   -import java.lang.reflect.Modifier;
>   -import java.beans.IntrospectionException;
>   -
>    import org.w3c.dom.Element;
>   -import org.w3c.dom.Document;
>   +import org.xml.sax.Attributes;
>   +import org.xml.sax.helpers.AttributesImpl;
> 
>   +import javax.xml.rpc.namespace.QName;
>    import java.beans.Introspector;
>    import java.beans.PropertyDescriptor;
>   -import java.io.ObjectStreamField;
>   +import java.io.IOException;
>    import java.io.Serializable;
>   -
>   -import java.util.HashMap;
>   +import java.lang.reflect.InvocationTargetException;
>   +import java.lang.reflect.Method;
>   +import java.lang.reflect.Modifier;
>   +import java.util.List;
>    import java.util.Vector;
>   -import java.util.Iterator;
> 
>    /**
>     * General purpose serializer/deserializerFactory for an 
> arbitrary java
>     bean.
>   @@ -305,7 +287,7 @@
>            // See if there is a super class, stop if we hit a 
> stop class
>            Element e = null;
>            Class superClass = javaType.getSuperclass();
>   -        Vector stopClasses = types.getStopClasses();
>   +        List stopClasses = types.getStopClasses();
>            if (superClass != null &&
>                    superClass != java.lang.Object.class &&
>                    (stopClasses == null ||
>   @@ -437,7 +419,6 @@
>         * attribute list
>         *
>         * @param value the object we are serializing
>   -     * @param pd the properties of this class
>         * @return attributes for this element, null if none
>         */
>        protected Attributes getObjectAttributes(Object value,
> 
> 
> 
>   1.46      +1 -0
>   xml-axis/java/src/org/apache/axis/providers/java/JavaProvider.java
> 
>   Index: JavaProvider.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/providers/java/Jav
> aProvider.java,v
> 
>   retrieving revision 1.45
>   retrieving revision 1.46
>   diff -u -r1.45 -r1.46
>   --- JavaProvider.java 25 Mar 2002 04:44:02 -0000    1.45
>   +++ JavaProvider.java 1 Apr 2002 20:12:17 -0000     1.46
>   @@ -325,6 +325,7 @@
>                emitter.setAllowedMethods(allowedMethods);
>                emitter.setIntfNamespace(url);
>                emitter.setLocationUrl(url);
>   +            emitter.setServiceDesc(msgContext.getService
>                ().getServiceDescription());
>                emitter.setTypeMapping
>                ((TypeMapping)msgContext.getTypeMappingRegistry().
>                                       
> getTypeMapping(Constants.URI_CURRENT_SOAP_ENC));
> 
>                emitter.setDefaultTypeMapping
>                ((TypeMapping)msgContext.getTypeMappingRegistry().
> 
> 
> 
>   1.5       +0 -24     
> xml-axis/java/src/org/apache/axis/wsdl/Skeleton.java
> 
>   Index: Skeleton.java
>   ===================================================================
>   RCS file:
>   /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/Skeleton.java,v
>   retrieving revision 1.4
>   retrieving revision 1.5
>   diff -u -r1.4 -r1.5
>   --- Skeleton.java     13 Mar 2002 19:50:58 -0000    1.4
>   +++ Skeleton.java     1 Apr 2002 20:12:17 -0000     1.5
>   @@ -61,28 +61,4 @@
>     * Interface for WSDL2Java generated skeletons
>     */
>    public interface Skeleton {
>   -    /**
>   -     * Used to return the name of the n-th parameter of 
> the specified
>   -     * operation.  Use n=-1 to get the return value.
>   -     * Returns null if problems occur or the parameter is 
> not known.
>   -     */
>   -    public QName getParameterName(String operationName, int n);
>   -
>   -    /**
>   -     * Note: The implementor should also provide a static 
> version of the
>   -     * above method named getParameterNameStatic
>   -     */
>   -
>   -    /**
>   -     * Used to return the mode of the n-th parameter of 
> the specified
>   -     * operation.  Use -1 to get the return mode.
>   -     * Returns null if problems occur or the parameter is 
> not known.
>   -     */
>   -    public ParameterMode getParameterMode(String 
> operationName, int n);
>   -
>   -    /**
>   -     * Note: The implementor should also provide a static 
> version of the
>   -     * above method named getParameterModeStatic
>   -     */
>   -
>    }
> 
> 
> 
>   1.4       +2 -1
>   
> xml-axis/java/src/org/apache/axis/wsdl/fromJava/BuilderPortTyp
> eClassRep.java
> 
> 
>   Index: BuilderPortTypeClassRep.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/Buil
> derPortTypeClassRep.java,v
> 
>   retrieving revision 1.3
>   retrieving revision 1.4
>   diff -u -r1.3 -r1.4
>   --- BuilderPortTypeClassRep.java  1 Feb 2002 22:46:13 -0000     1.3
>   +++ BuilderPortTypeClassRep.java  1 Apr 2002 20:12:17 -0000     1.4
>   @@ -55,6 +55,7 @@
>    package org.apache.axis.wsdl.fromJava;
> 
>    import java.util.Vector;
>   +import java.util.List;
> 
>    /**
>     * BuilderPortTypeClassRep:
>   @@ -77,7 +78,7 @@
>         * @param implClass  An optional implClass can be 
> passed in that
>         implements/extends cls.
>         *                   The purpose of the implClass is 
> to find method
>         parameter names.
>         **/
>   -    public ClassRep build(Class cls, boolean inhMethods, Vector
>   stopClasses, Class implClass);
>   +    public ClassRep build(Class cls, boolean inhMethods, List
>   stopClasses, Class implClass);
> 
>        /**
>         * Returns a list of MethodReps to be used for 
> portType operation
>         processing.
> 
> 
> 
>   1.26      +6 -9
>   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/Clas
> sRep.java,v
>   retrieving revision 1.25
>   retrieving revision 1.26
>   diff -u -r1.25 -r1.26
>   --- ClassRep.java     28 Mar 2002 15:21:46 -0000    1.25
>   +++ ClassRep.java     1 Apr 2002 20:12:17 -0000     1.26
>   @@ -69,6 +69,7 @@
>    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;
>   @@ -160,7 +161,7 @@
>        private Vector   _methods    = new Vector();
>        private Vector   _fields     = new Vector();
>        private HashMap  _fieldNames = new HashMap();
>   -    private Vector   _stopList    = null;
>   +    private List     _stopList    = null;
> 
>        /**
>         * Constructor
>   @@ -182,13 +183,13 @@
>         *                   class that implements or extends cls.  The
>         *                   implClass is used to obtain 
> parameter names.
>         */
>   -    public ClassRep(Class cls, boolean inhMethods, Vector 
> stopList) {
>   +    public ClassRep(Class cls, boolean inhMethods, List stopList) {
>            init(cls, inhMethods, stopList, null);
>        }
>   -    public ClassRep(Class cls, boolean inhMethods, Vector stopList,
>   Class implClass) {
>   +    public ClassRep(Class cls, boolean inhMethods, List 
> stopList, Class
>   implClass) {
>            init(cls, inhMethods, stopList, implClass);
>        }
>   -    protected void init(Class cls, boolean inhMethods, 
> Vector stopList,
>   Class implClass) {
>   +    protected void init(Class cls, boolean inhMethods, 
> List stopList,
>   Class implClass) {
>            _name = cls.getName();
>            _isInterface = cls.isInterface();
>            _modifiers = cls.getModifiers();
>   @@ -235,9 +236,7 @@
>         * @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
>   -     * @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.
>         */
>   @@ -442,7 +441,6 @@
>         * @param method is the Method to search.
>         * @param implClass  If the first search fails, the 
> corresponding
>         *                   Method in this class is searched.
>   -     * @param types  are the parameter types after 
> converting Holders.
>         * @return array of Strings which represent the return 
> name followed
>         by parameter names
>         */
>        protected String[] getParameterNames(Method method, 
> Class implClass)
>   {
>   @@ -526,7 +524,6 @@
>         * @param method is the Method to search.
>         * @param implClass  If the first search fails, the 
> corresponding
>         *                   Method in this class is searched.
>   -     * @param types  are the parameter types after 
> converting Holders.
>         * @return array of Strings which represent the return 
> mode followed
>         by parameter modes
>         */
>        protected ParameterMode[] getParameterModes(Method 
> method, Class
>        implClass) {
> 
> 
> 
>   1.4       +2 -1
>   
> xml-axis/java/src/org/apache/axis/wsdl/fromJava/DefaultBuilder
> PortTypeClassRep.java
> 
> 
>   Index: DefaultBuilderPortTypeClassRep.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/Defa
> ultBuilderPortTypeClassRep.java,v
> 
>   retrieving revision 1.3
>   retrieving revision 1.4
>   diff -u -r1.3 -r1.4
>   --- DefaultBuilderPortTypeClassRep.java 1 Feb 2002 22:46:13 
> -0000     1.3
>   +++ DefaultBuilderPortTypeClassRep.java 1 Apr 2002 20:12:17 
> -0000     1.4
>   @@ -55,6 +55,7 @@
>    package org.apache.axis.wsdl.fromJava;
> 
>    import java.util.Vector;
>   +import java.util.List;
> 
>    /**
>     * DefaultBuilderPortTypeClassRep:
>   @@ -80,7 +81,7 @@
>         * @param implClass  An optional implClass can be 
> passed in that
>         implements/extends cls.
>         *                   The purpose of the implClass is 
> to find method
>         parameter names.
>         **/
>   -    public ClassRep build(Class cls, boolean inhMethods, Vector
>   stopClasses, Class implClass) {
>   +    public ClassRep build(Class cls, boolean inhMethods, List
>   stopClasses, Class implClass) {
>            // Constructs a default ClassRep from the class
>            // The Java2WSDL code examines the names/methods/params in
>            ClassRep (and its super classes)
>            // when constructing complexTypes.  So if you want 
> to change the
>            WSDL
> 
> 
> 
>   1.27      +222 -238
>   xml-axis/java/src/org/apache/axis/wsdl/fromJava/Emitter.java
> 
>   Index: Emitter.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/Emit
> ter.java,v
>   retrieving revision 1.26
>   retrieving revision 1.27
>   diff -u -r1.26 -r1.27
>   --- Emitter.java      28 Mar 2002 15:21:47 -0000    1.26
>   +++ Emitter.java      1 Apr 2002 20:12:17 -0000     1.27
>   @@ -67,10 +67,11 @@
>    import com.ibm.wsdl.extensions.soap.SOAPOperationImpl;
> 
>    import org.apache.axis.Constants;
>   -import org.apache.axis.MessageContext;
>   -import org.apache.axis.encoding.TypeMapping;
>   -import org.apache.axis.encoding.DefaultTypeMappingImpl;
>   -import org.apache.axis.encoding.DefaultSOAP12TypeMappingImpl;
>   +import org.apache.axis.description.OperationDesc;
>   +import org.apache.axis.description.ServiceDesc;
>   +import org.apache.axis.description.ParameterDesc;
>   +import org.apache.axis.description.FaultDesc;
>   +import org.apache.axis.encoding.*;
>    import org.apache.axis.utils.XMLUtils;
>    import org.w3c.dom.Document;
> 
>   @@ -96,17 +97,10 @@
>    import java.io.File;
>    import java.io.FileOutputStream;
>    import java.io.StringWriter;
>   -import java.lang.reflect.Method;
>   -import java.lang.reflect.Modifier;
>   -import java.util.ArrayList;
>   -import java.util.List;
>   -import java.util.Map;
>   -import java.util.StringTokenizer;
>   -import java.util.Vector;
>   -import java.util.HashMap;
>   +import java.util.*;
> 
>    /**
>   - * This class emits WSDL from Java classes.  It is used by 
> the ?WSDL
>   + * This class emits WSDL from Java classes.  It is used by 
> the ?WSDL
>     * Axis browser function and Java2WSDL commandline utility.
>     * See Java2WSDL and Java2WSDLFactory for more information.
>     *
>   @@ -118,7 +112,7 @@
>        public static final int MODE_ALL = 0;
>        public static final int MODE_INTERFACE = 1;
>        public static final int MODE_IMPLEMENTATION = 2;
>   -
>   +
>        public static final int MODE_RPC = 0;
>        public static final int MODE_DOCUMENT = 1;
> 
>   @@ -126,7 +120,7 @@
>        private Class implCls;                 // Optional 
> implementation
>        class
>        private Vector allowedMethods = null;  // Names of methods to
>        consider
>        private Vector disallowedMethods = null; // Names of methods to
>        exclude
>   -    private Vector stopClasses = null;// class names which halt
>   inheritace searches
>   +    private ArrayList stopClasses = null;// class names which halt
>   inheritace searches
>        private boolean useInheritedMethods = false;
>        private String intfNS;
>        private String implNS;
>   @@ -138,19 +132,21 @@
>        private String description;
>        private int mode = MODE_RPC;
>        private TypeMapping tm = null;        // Registered 
> type mapping
>   -    private TypeMapping defaultTM = null; // Default TM
>   +    private TypeMapping defaultTM = null; // Default TM
>        private Namespaces namespaces;
>        private Map exceptionMsg = null;
> 
>        private ArrayList encodingList;
>   -    private Types types;
>   +    private Types types;
>        private String clsName;
>        private String portTypeName;
>   -
>   +
>   +    private ServiceDesc serviceDesc;
>   +
>        private Java2WSDLFactory factory;  // Factory for 
> obtaining user
>        extensions
> 
>        /**
>   -     * Construct Emitter.
>   +     * Construct Emitter.
>         * Set the contextual information using set* methods
>         * Invoke emit to emit the code
>         */
>   @@ -161,10 +157,10 @@
>        }
> 
>        /**
>   -     * Generates WSDL documents for a given <code>Class</code>
>   +     * Generates WSDL documents for a given <code>Class</code>
>         *
>   -     * @param filename1  interface WSDL
>   -     * @param filename2  implementation WSDL
>   +     * @param filename1  interface WSDL
>   +     * @param filename2  implementation WSDL
>         * @throws Exception
>         */
>        public void emit(String filename1, String filename2) throws
>   Exception {
>   @@ -180,13 +176,13 @@
>                filename2 = getServicePortName() + 
> "_implementation.wsdl";
>            }
> 
>   -        // Write out the interface def
>   +        // Write out the interface def
>            Document doc = WSDLFactory.newInstance().
>                newWSDLWriter().getDocument(intf);
>            types.insertTypesFragment(doc);
>            prettyDocumentToFile(doc, filename1);
> 
>   -        // Write out the implementation def
>   +        // Write out the implementation def
>            doc = WSDLFactory.newInstance().newWSDLWriter
>            ().getDocument(impl);
>            prettyDocumentToFile(doc, filename2);
>        }
>   @@ -194,7 +190,7 @@
>        /**
>         * Generates a complete WSDL document for a given 
> <code>Class</code>
>         *
>   -     * @param filename  WSDL
>   +     * @param filename  WSDL
>         * @throws Exception
>         */
>        public void emit(String filename) throws Exception {
>   @@ -202,17 +198,28 @@
>        }
> 
>        /**
>   -     * Generates a WSDL document for a given <code>Class</code>.
>   -     * The WSDL generated is controlled by the mode parameter
>   +     * Generates a WSDL document for a given <code>Class</code>.
>   +     * The WSDL generated is controlled by the mode parameter
>         * mode 0: All
>         * mode 1: Interface
>         * mode 2: Implementation
>   -     *
>   -     * @param mode generation mode - all, interface, implementation
>   -     * @return Document
>   +     *
>   +     * @param mode generation mode - all, interface, implementation
>   +     * @return Document
>         * @throws Exception
>         */
>        public Document emit(int mode) throws Exception {
>   +        if (serviceDesc == null) {
>   +            serviceDesc = new ServiceDesc();
>   +            serviceDesc.setImplClass(cls);
>   +            //serviceDesc.setStyle();
>   +            TypeMappingRegistry tmr = new 
> TypeMappingRegistryImpl();
>   +            serviceDesc.setTypeMapping
>   ((TypeMapping)tmr.getDefaultTypeMapping());
>   +        }
>   +
>   +        serviceDesc.setStopClasses(stopClasses);
>   +        serviceDesc.setDisallowedMethods(disallowedMethods);
>   +
>            Document doc = null;
>            Definition def = null;
>            switch (mode) {
>   @@ -234,7 +241,7 @@
>                        newWSDLWriter().getDocument(def);
>                    break;
>                default:
>   -                throw new Exception ("unrecognized output 
> WSDL mode");
>   +                throw new Exception ("unrecognized output 
> WSDL mode");
>            }
> 
>            // Return the document
>   @@ -243,13 +250,13 @@
> 
>        /**
>         * Generates a String containing the WSDL for a given
>         <code>Class</code>.
>   -     * The WSDL generated is controlled by the mode parameter
>   +     * The WSDL generated is controlled by the mode parameter
>         * mode 0: All
>         * mode 1: Interface
>         * mode 2: Implementation
>   -     *
>   -     * @param mode generation mode - all, interface, implementation
>   -     * @return String
>   +     *
>   +     * @param mode generation mode - all, interface, implementation
>   +     * @return String
>         * @throws Exception
>         */
>        public String emitToString(int mode) throws Exception {
>   @@ -261,13 +268,13 @@
> 
>        /**
>         * Generates a WSDL document for a given <code>Class</code>.
>   -     * The WSDL generated is controlled by the mode parameter
>   +     * The WSDL generated is controlled by the mode parameter
>         * mode 0: All
>         * mode 1: Interface
>         * mode 2: Implementation
>   -     *
>   +     *
>         * @param filename  WSDL
>   -     * @param mode generation mode - all, interface, implementation
>   +     * @param mode generation mode - all, interface, implementation
>         * @throws Exception
>         */
>        public void emit(String filename, int mode) throws Exception {
>   @@ -302,13 +309,13 @@
>        public Definition getWSDL() throws Exception {
>            // Invoke the init() method to ensure 
> configuration is setup
>            init();
>   -
>   +
>            // Create a definition
>            Definition def = WSDLFactory.newInstance().newDefinition();
> 
>            // Write interface header
>            writeDefinitions(def, intfNS);
>   -        types = new Types(def, tm, defaultTM, namespaces,
>   +        types = new Types(def, tm, defaultTM, namespaces,
>                              intfNS, factory, stopClasses);
>            Binding binding = writeBinding(def, true);
>            writePortType(def, binding);
>   @@ -332,7 +339,7 @@
> 
>            // Write interface header
>            writeDefinitions(def, intfNS);
>   -        types = new Types(def, tm, defaultTM, namespaces,
>   +        types = new Types(def, tm, defaultTM, namespaces,
>                              intfNS, factory, stopClasses);
>            Binding binding = writeBinding(def, true);
>            writePortType(def, binding);
>   @@ -362,7 +369,7 @@
>        }
>        /**
>         * Invoked prior to building a definition to ensure parms
>   -     * and data are set up.
>   +     * and data are set up.
>         * @throws Exception
>         */
>        private void init() throws Exception {
>   @@ -388,12 +395,12 @@
>                            name = 
> name.substring(name.lastIndexOf('/') +
>                        1);
>                        } else if (name.lastIndexOf('\\') > 0) {
>                            name = 
> name.substring(name.lastIndexOf('\\') +
>   1);
>   -                    } else {
>   +                    } else {
>                            name = null;
>                        }
>                        // if we got the name from the 
> location, strip .jws
>                        from it
>                        if (name != null && name.endsWith(".jws") ) {
>   -                        name = name.substring(0,
>   +                        name = name.substring(0,
>                                                  (name.length() -
>                        ".jws".length()));
>                        }
>                    }
>   @@ -402,12 +409,12 @@
>                    }
>                    setServicePortName(name);
>                }
>   -
>   +
>                encodingList = new ArrayList();
>                encodingList.add(Constants.URI_CURRENT_SOAP_ENC);
>   -
> 
>   -            // We want to produce valid SOAP 1.2 JAX-RPC
>   +
>   +            // We want to produce valid SOAP 1.2 JAX-RPC
>                // translations, so make sure that the default 
> type mapping
>                // is for SOAP 1.2.
>                if (defaultTM == null ||
>   @@ -429,7 +436,7 @@
>        }
> 
>        /**
>   -     * Create the definition header information.
>   +     * Create the definition header information.
>         *
>         * @param def  <code>Definition</code>
>         * @param tns  target namespace
>   @@ -454,7 +461,7 @@
> 
>            def.addNamespace(Constants.NSPREFIX_SOAP_ENC,
>                             Constants.URI_CURRENT_SOAP_ENC);
>   -        namespaces.putPrefix(Constants.URI_CURRENT_SOAP_ENC,
>   +        namespaces.putPrefix(Constants.URI_CURRENT_SOAP_ENC,
>                                 Constants.NSPREFIX_SOAP_ENC);
> 
>            def.addNamespace(Constants.NSPREFIX_SCHEMA_XSD,
>   @@ -464,11 +471,11 @@
>        }
> 
>       /**
>   -     * Create and add an import
>   +     * Create and add an import
>         *
>         * @param def  <code>Definition</code>
>         * @param tns  target namespace
>   -     * @param loc  target location
>   +     * @param loc  target location
>         * @throws Exception
>         */
>        private void writeImport(Definition def, String tns, 
> String loc)
>   @@ -482,7 +489,7 @@
>        }
> 
>        /**
>   -     * Create the binding.
>   +     * Create the binding.
>         *
>         * @param def  <code>Definition</code>
>         * @param add  true if binding should be added to the def
>   @@ -509,17 +516,16 @@
>        }
> 
>        /**
>   -     * Create the service.
>   +     * Create the service.
>         *
>   -     * @param def
>   -     * @param binding
>   -     * @throws Exception
>   +     * @param def
>   +     * @param binding
>         */
>        private void writeService(Definition def, Binding binding) {
> 
>            Service service = def.createService();
> 
>   -        service.setQName(new javax.wsdl.QName(implNS,
>   +        service.setQName(new javax.wsdl.QName(implNS,
>                                                  
> getServiceElementName()));
> 
>            def.addService(service);
>   @@ -539,13 +545,13 @@
>            service.addPort(port);
>        }
> 
>   -    /** Create a PortType
>   +    /** Create a PortType
>         *
>   -     * @param def
>   -     * @param binding
>   +     * @param def
>   +     * @param binding
>         * @throws Exception
>         */
>   -    private void writePortType(Definition def, Binding binding)
>   +    private void writePortType(Definition def, Binding binding)
>            throws Exception{
> 
>            PortType portType = def.createPortType();
>   @@ -554,25 +560,14 @@
>            // PortType name is the name of the class being processed
>            portType.setQName(new javax.wsdl.QName(intfNS, 
> getPortTypeName
>            ()));
> 
>   -        // Get a ClassRep representing the portType class,
>   -        // and get the list of MethodRep
>   -        // objects representing the methods that should
>   -        // be contained in the portType.
>   -        // This allows users to provide their own method/parameter
>   mapping.
>   -        BuilderPortTypeClassRep builder =
>   -           factory.getBuilderPortTypeClassRep();
>   -        ClassRep classRep =
>   -           builder.build(cls, useInheritedMethods, stopClasses,
>   implCls);
>   -        Vector methods =
>   -           builder.getResolvedMethods(classRep,
>   -                                      allowedMethods,
>   -                                      disallowedMethods);
>   -
>   -        for(int i=0; i<methods.size(); i++) {
>   -            MethodRep method = (MethodRep) methods.elementAt(i);
>   -            BindingOperation bindingOper = 
> writeOperation(def, binding,
>   method);
>   +        ArrayList operations = serviceDesc.getOperations();
>   +        for (Iterator i = operations.iterator(); i.hasNext();) {
>   +            OperationDesc thisOper = (OperationDesc)i.next();
>   +            BindingOperation bindingOper = writeOperation(def,
>   +                                                          binding,
>   +                                                          
> thisOper);
>                Operation oper = bindingOper.getOperation();
>   -            writeMessages(def, oper, method, bindingOper);
>   +            writeMessages(def, oper, thisOper, bindingOper);
>                portType.addOperation(oper);
>            }
> 
>   @@ -581,53 +576,55 @@
>            binding.setPortType(portType);
>        }
> 
>   -    /** Create a Message
>   +    /** Create a Message
>         *
>   -     * @param def
>   -     * @param oper
>   -     * @param method (A MethodRep object)
>   +     * @param def
>   +     * @param oper
>         * @throws Exception
>         */
>        private void writeMessages(Definition def, Operation oper,
>   -            MethodRep method, BindingOperation bindingOper)
>   +            OperationDesc desc, BindingOperation bindingOper)
>                throws Exception{
>            Input input = def.createInput();
> 
>   -        Message msg = writeRequestMessage(def, method);
>   +        Message msg = writeRequestMessage(def, desc);
>            input.setMessage(msg);
> 
>   +
>            // Iff this method is overloaded, then give the input
>            // stanzas a name.
>   -        if (method.isOverloaded()) {
>   -            String name = msg.getQName().getLocalPart();
>   -            input.setName(name);
>   -            bindingOper.getBindingInput().setName(name);
>   -        }
>   +//        if (method.isOverloaded()) {
>   +//            String name = msg.getQName().getLocalPart();
>   +//            input.setName(name);
>   +//            bindingOper.getBindingInput().setName(name);
>   +//        }
>            oper.setInput(input);
> 
>            def.addMessage(msg);
> 
>   -        msg = writeResponseMessage(def, method);
>   +        msg = writeResponseMessage(def, desc);
>            Output output = def.createOutput();
>            output.setMessage(msg);
> 
>            // Iff this method is overloaded, then give the output
>            // stanzas a name.
>   -        if (method.isOverloaded()) {
>   -            String name = msg.getQName().getLocalPart();
>   -            output.setName(name);
>   -            bindingOper.getBindingOutput().setName(name);
>   -        }
>   +//        if (method.isOverloaded()) {
>   +//            String name = msg.getQName().getLocalPart();
>   +//            output.setName(name);
>   +//            bindingOper.getBindingOutput().setName(name);
>   +//        }
>            oper.setOutput(output);
> 
>            def.addMessage(msg);
> 
>   -        Vector exceptions = method.getExceptions();
>   -        for (int i = 0; i < exceptions.size(); i++) {
>   -            msg = writeFaultMessage(def, (ExceptionRep)
>   exceptions.elementAt(i));
>   +        ArrayList exceptions = desc.getFaults();
>   +
>   +        for (int i = 0; exceptions != null && i < 
> exceptions.size();
>   i++) {
>   +            FaultDesc faultDesc = (FaultDesc) exceptions.get(i);
>   +            msg = writeFaultMessage(def, faultDesc);
>                Fault fault = def.createFault();
>                fault.setMessage(msg);
>   -            fault.setName(((ExceptionRep)
>   exceptions.elementAt(i)).getName());
>   +            fault.setName((faultDesc).getName());
>                oper.addFault(fault);
>                if (def.getMessage(msg.getQName()) == null) {
>                    def.addMessage(msg);
>   @@ -635,15 +632,11 @@
>            }
> 
>            // Set the parameter ordering using the parameter names
>   +        ArrayList parameters = desc.getParameters();
>            Vector names = new Vector();
>   -        for (int i=0; i<method.getParameters().size(); i++) {
>   -            ParamRep parameter = (ParamRep)
>   -                method.getParameters().elementAt(i);
>   -            if ((i == 0) &&
>   -                MessageContext.class.equals(parameter.getType())) {
>   -                continue;
>   -            }
>   -            names.add(parameter.getName());
>   +        for (int i = 0; i < parameters.size(); i++) {
>   +            ParameterDesc param = (ParameterDesc)parameters.get(i);
>   +            names.add(param.getName());
>            }
> 
>            if (names.size() > 0)
>   @@ -652,32 +645,28 @@
> 
>        /** Create a Operation
>         *
>   -     * @param def
>   -     * @param binding
>   -     * @param methodRep  - Representation of the method
>   -     * @throws Exception
>   +     * @param def
>   +     * @param binding
>         */
>   -    private BindingOperation writeOperation(Definition def,
>   -                                     Binding binding,
>   -                                     MethodRep methodRep) {
>   +    private BindingOperation writeOperation(Definition def,
>   +                                     Binding binding,
>   +                                     OperationDesc desc) {
>            Operation oper = def.createOperation();
>   -        oper.setName(methodRep.getName());
>   +        oper.setName(desc.getName());
>            oper.setUndefined(false);
>   -        return writeBindingOperation(def, binding, oper, 
> methodRep);
>   +        return writeBindingOperation(def, binding, oper, desc);
>        }
> 
>        /** Create a Binding Operation
>         *
>   -     * @param def
>   -     * @param binding
>   -     * @param oper
>   -     * @param methodRep  - Representation of the method
>   -     * @throws Exception
>   +     * @param def
>   +     * @param binding
>   +     * @param oper
>         */
>   -    private BindingOperation writeBindingOperation (Definition def,
>   -                                        Binding binding,
>   +    private BindingOperation writeBindingOperation (Definition def,
>   +                                        Binding binding,
>                                            Operation oper,
>   -                                        MethodRep methodRep) {
>   +                                        OperationDesc desc) {
>            BindingOperation bindingOper = 
> def.createBindingOperation();
>            BindingInput bindingInput = def.createBindingInput();
>            BindingOutput bindingOutput = def.createBindingOutput();
>   @@ -686,16 +675,16 @@
>            bindingOper.setOperation(oper);
> 
>            SOAPOperation soapOper = new SOAPOperationImpl();
>   -        String soapAction = methodRep.getMetaData("soapAction");
>   +        String soapAction = desc.getSoapAction();
>            if (soapAction == null) {
>                soapAction = "";
>            }
>            soapOper.setSoapActionURI(soapAction);
>   -
>   +
>            // Until we have per-operation configuration, this 
> will always
>            be
>            // the same as the binding default.
>            // soapOper.setStyle("rpc");
>   -
>   +
>            bindingOper.addExtensibilityElement(soapOper);
> 
>            // Input SOAP Body
>   @@ -711,13 +700,13 @@
>                soapBodyIn.setNamespaceURI(intfNS);
>            else
>                soapBodyIn.setNamespaceURI(targetService);
>   -        String namespace = methodRep.getMetaData("inputNamespace");
>   -        if (namespace != null) {
>   -            soapBodyIn.setNamespaceURI(namespace);
>   +        QName operQName = desc.getElementQName();
>   +        if (operQName != null) {
>   +            soapBodyIn.setNamespaceURI(operQName.getLocalPart());
>            }
>            soapBodyIn.setEncodingStyles(encodingList);
>            bindingInput.addExtensibilityElement(soapBodyIn);
>   -
>   +
>            // Output SOAP Body
>            SOAPBody soapBodyOut = new SOAPBodyImpl();
>            // for now, if its document, it literal use.
>   @@ -731,9 +720,9 @@
>                soapBodyOut.setNamespaceURI(intfNS);
>            else
>                soapBodyOut.setNamespaceURI(targetService);
>   -        namespace = methodRep.getMetaData("outputNamespace");
>   -        if (namespace != null) {
>   -            soapBodyOut.setNamespaceURI(namespace);
>   +        QName retQName = desc.getReturnQName();
>   +        if (retQName != null) {
>   +            soapBodyOut.setNamespaceURI(retQName.getLocalPart());
>            }
>            bindingOutput.addExtensibilityElement(soapBodyOut);
> 
>   @@ -747,31 +736,24 @@
> 
>        /** Create a Request Message
>         *
>   -     * @param def
>   -     * @param method (a MethodRep object)
>   +     * @param def
>         * @throws Exception
>         */
>        private Message writeRequestMessage(Definition def,
>   -                                        MethodRep method) throws
>   Exception
>   +                                        OperationDesc oper) throws
>   Exception
>        {
>            Message msg = def.createMessage();
> 
>            javax.wsdl.QName qName
>   -                = createMessageName(def, method.getName(), 
> "Request");
>   +                = createMessageName(def, oper.getName(), 
> "Request");
> 
>            msg.setQName(qName);
>            msg.setUndefined(false);
> 
>   -        Vector parameters = method.getParameters();
>   +        ArrayList parameters = oper.getParameters();
>            for(int i=0; i<parameters.size(); i++) {
>   -            ParamRep parameter = (ParamRep) 
> parameters.elementAt(i);
>   -            // If the first param is a MessageContext, Axis will
>   -            // generate it for us - it shouldn't be in the WSDL.
>   -            if ((i == 0) &&
>   -                MessageContext.class.equals(parameter.getType())) {
>   -                continue;
>   -            }
>   -            writePartToMessage(def, msg, true,parameter);
>   +            ParameterDesc parameter = (ParameterDesc) 
> parameters.get(i);
>   +            writePartToMessage(def, msg, true, parameter);
>            }
> 
>            return msg;
>   @@ -779,47 +761,49 @@
> 
>        /** Create a Response Message
>         *
>   -     * @param def
>   -     * @param method
>   +     * @param def
>         * @throws Exception
>         */
>   -    private Message writeResponseMessage(Definition def,
>   -                                         MethodRep method) throws
>   Exception
>   +    private Message writeResponseMessage(Definition def,
>   +                                         OperationDesc desc) throws
>   Exception
>        {
>            Message msg = def.createMessage();
> 
>            javax.wsdl.QName qName
>   -                = createMessageName(def, method.getName(), 
> "Response");
>   +                = createMessageName(def, desc.getName(), 
> "Response");
> 
>            msg.setQName(qName);
>            msg.setUndefined(false);
> 
>            // Write the part
>   -        ParamRep retParam = method.getReturns();
>   +        ParameterDesc retParam = new ParameterDesc();
>   +        if (desc.getReturnQName() == null) {
>   +            retParam.setName("return");
>   +        } else {
>   +            retParam.setQName(desc.getReturnQName());
>   +        }
>   +        retParam.setTypeQName(desc.getReturnType());
>   +        retParam.setJavaType(desc.getReturnClass());
>   +        retParam.setMode(ParameterDesc.OUT);
>   +        // FIXME : Set Java type??
>            writePartToMessage(def, msg, false, retParam);
> 
>   -        Vector parameters = method.getParameters();
>   -        for(int i=0; i<parameters.size(); i++) {
>   -            ParamRep parameter = (ParamRep) 
> parameters.elementAt(i);
>   -            // If the first param is a MessageContext, Axis will
>   -            // generate it for us - it shouldn't be in the WSDL.
>   -            if ((i == 0) &&
>   -                MessageContext.class.equals(parameter.getType())) {
>   -                continue;
>   -            }
>   -            writePartToMessage(def, msg, false,parameter);
>   +        ArrayList parameters = desc.getParameters();
>   +        for (Iterator i = parameters.iterator(); i.hasNext();) {
>   +            ParameterDesc param = (ParameterDesc)i.next();
>   +            writePartToMessage(def, msg, false, param);
>            }
>            return msg;
>        }
> 
>        /** Create a Fault Message
>         *
>   -     * @param def
>   -     * @param exception (an ExceptionRep object)
>   +     * @param def
>   +     * @param exception (an ExceptionRep object)
>         * @throws Exception
>         */
>        private Message writeFaultMessage(Definition def,
>   -                                      ExceptionRep 
> exception) throws
>   Exception
>   +                                      FaultDesc exception) throws
>   Exception
>        {
> 
>            String pkgAndClsName = exception.getName();
>   @@ -827,11 +811,11 @@
>                                                     
> pkgAndClsName.length
>                                                     ());
> 
>            // There are inconsistencies in the JSR 101 version 0.7
>   specification
>   -        // with regards to whether the java exception class name is
>   mapped to
>   -        // the wsdl:fault name= attribute or is mapped to the
>   wsdl:message of
>   +        // with regards to whether the java exception class name is
>   mapped to
>   +        // the wsdl:fault name= attribute or is mapped to the
>   wsdl:message of
>            // the wsdl:fault message= attribute.  Currently 
> WSDL2Java uses
>            the
>            // latter mapping to generate the java exception class.
>   -        //
>   +        //
>            // The following code uses the class name for both 
> the name=
>            attribute
>            // and the message= attribute.
> 
>   @@ -846,16 +830,10 @@
>                msg.setQName(qName);
>                msg.setUndefined(false);
> 
>   -            Vector parameters = exception.getParameters();
>   +            ArrayList parameters = exception.getParameters();
>                for (int i=0; i<parameters.size(); i++) {
>   -                ParamRep parameter = (ParamRep) 
> parameters.elementAt(i);
>   -                // If the first param is a MessageContext, 
> Axis will
>   -                // generate it for us - it shouldn't be in 
> the WSDL.
>   -                if ((i == 0) &&
>   -                    
> MessageContext.class.equals(parameter.getType())) {
>   -                    continue;
>   -                }
>   -                writePartToMessage(def, msg, true, parameter);
>   +                ParameterDesc parameter = (ParameterDesc)
>   parameters.get(i);
>   +                writePartToMessage(def, msg, true, parameter);
>                }
> 
>                exceptionMsg.put(pkgAndClsName, msg);
>   @@ -867,37 +845,37 @@
> 
>        /** Create a Part
>         *
>   -     * @param def
>   -     * @param msg
>   +     * @param def
>   +     * @param msg
>         * @param request     message is for a request
>   -     * @param param       ParamRep object
>   +     * @param param       ParamRep object
>         * @return The parameter name added or null
>         * @throws Exception
>         */
>   -    public String writePartToMessage(Definition def,
>   +    public String writePartToMessage(Definition def,
>                                         Message msg,
>                                         boolean request,
>   -                                     ParamRep param) 
> throws Exception
>   +                                     ParameterDesc param) throws
>   Exception
>        {
>            // Return if this is a void type
>            if (param == null ||
>   -            param.getType() == java.lang.Void.TYPE)
>   +            param.getJavaType() == java.lang.Void.TYPE)
>                return null;
> 
>            // If Request message, only continue if IN or INOUT
>            // If Response message, only continue if OUT or INOUT
>   -        if (request &&
>   -            param.getMode() == ParamRep.OUT)
>   +        if (request &&
>   +            param.getMode() == ParameterDesc.OUT)
>                return null;
>   -        if (!request &&
>   -            param.getMode() == ParamRep.IN)
>   +        if (!request &&
>   +            param.getMode() == ParameterDesc.IN)
>                return null;
> 
>            // Create the Part
>            Part part = def.createPart();
> 
>            // Write the type representing the parameter type
>   -        javax.wsdl.QName typeQName = 
> types.writePartType(param.getType
>   ());
>   +        javax.wsdl.QName typeQName =
>   types.writePartType(param.getJavaType());
>            if (typeQName != null) {
>                part.setTypeName(typeQName);
>                part.setName(param.getName());
>   @@ -919,7 +897,7 @@
>            // Check the make sure there isn't a message with this name
>            already
>            int messageNumber = 1;
>            while (def.getMessage(qName) != null) {
>   -            StringBuffer namebuf =
>   +            StringBuffer namebuf =
>                    new StringBuffer(methodName.concat(suffix));
>                namebuf.append(messageNumber);
>                qName = new javax.wsdl.QName(intfNS, 
> namebuf.toString());
>   @@ -935,15 +913,15 @@
>         * @param filename the name of the file to be written
>         * @throws Exception various file i/o exceptions
>         */
>   -    private void prettyDocumentToFile(Document doc, String 
> filename)
>   +    private void prettyDocumentToFile(Document doc, String 
> filename)
>            throws Exception {
>   -        FileOutputStream fos = new FileOutputStream(new 
> File(filename));
>   +        FileOutputStream fos = new FileOutputStream(new 
> File(filename));
>            XMLUtils.PrettyDocumentToStream(doc, fos);
>            fos.close();
>         }
> 
>        // -------------------- Parameter Query Methods
>   ----------------------------//
>   -
>   +
>        /**
>         * Returns the <code>Class</code> to export
>         * @return the <code>Class</code> to export
>   @@ -963,7 +941,6 @@
>        /**
>         * Sets the <code>Class</code> to export.
>         * @param cls the <code>Class</code> to export
>   -     * @param name service location
>         */
>        public void setClsSmart(Class cls, String location) {
> 
>   @@ -972,20 +949,20 @@
> 
>            // Strip off \ and / from location
>            if (location.lastIndexOf('/') > 0) {
>   -            location =
>   +            location =
>                  location.substring(location.lastIndexOf('/') + 1);
>            } else if (location.lastIndexOf('\\') > 0) {
>   -            location =
>   +            location =
>                  location.substring(location.lastIndexOf('\\') + 1);
>   -        }
>   +        }
> 
>            // Get the constructors of the class
>   -        java.lang.reflect.Constructor[] constructors =
>   +        java.lang.reflect.Constructor[] constructors =
>              cls.getDeclaredConstructors();
>            Class intf = null;
>            for (int i=0; i<constructors.length && intf == null; i++) {
>                Class[] parms = constructors[i].getParameterTypes();
>   -            // If the constructor has a single parameter
>   +            // If the constructor has a single parameter
>                // that is an interface which
>                // matches the location, then use this as the interface
>                class.
>                if (parms.length == 1 &&
>   @@ -1050,12 +1027,12 @@
> 
>        /**
>         * Sets the <code>Java2WSDLFactory Class</code> to use
>   -     * @param className the name of the factory <code>Class</code>
>   +     * @param className the name of the factory <code>Class</code>
>         */
>        public void setFactory(String className) {
>            try {
>                ClassLoader cl = Thread.currentThread
>                ().getContextClassLoader();
>   -            factory = (Java2WSDLFactory)
>   +            factory = (Java2WSDLFactory)
>                    Class.forName(className, true,cl).newInstance();
>            }
>            catch (Exception ex) {
>   @@ -1065,7 +1042,7 @@
> 
>        /**
>         * Sets the <code>Java2WSDLFactory Class</code> to use
>   -     * @param factory is the factory Class
>   +     * @param factory is the factory Class
>         */
>        public void setFactory(Java2WSDLFactory factory) {
>            this.factory = factory;
>   @@ -1084,15 +1061,15 @@
>         * @return interface target namespace
>         */
>        public String getIntfNamespace() {
>   -        return intfNS;
>   +        return intfNS;
>        }
> 
>        /**
>         * Set the interface namespace
>   -     * @param ns interface target namespace
>   +     * @param ns interface target namespace
>         */
>        public void setIntfNamespace(String ns) {
>   -        this.intfNS = ns;
>   +        this.intfNS = ns;
>        }
> 
>       /**
>   @@ -1100,15 +1077,15 @@
>         * @return implementation target namespace
>         */
>        public String getImplNamespace() {
>   -        return implNS;
>   +        return implNS;
>        }
> 
>        /**
>         * Set the implementation namespace
>   -     * @param ns implementation target namespace
>   +     * @param ns implementation target namespace
>         */
>        public void setImplNamespace(String ns) {
>   -        this.implNS = ns;
>   +        this.implNS = ns;
>        }
> 
>        /**
>   @@ -1121,7 +1098,6 @@
> 
>        /**
>         * Set a list of methods to export
>   -     * @param allowedMethods a space separated list of 
> methods to export
>         */
>        public void setAllowedMethods(String text) {
>            if (text != null) {
>   @@ -1132,7 +1108,7 @@
>                }
>            }
>        }
>   -
>   +
>        /**
>         * Set a Vector of methods to export
>         * @param allowedMethods a vector of methods to export
>   @@ -1143,30 +1119,30 @@
> 
>        /**
>         * Indicates if the emitter will search classes for inherited
>         methods
>   -     */
>   +     */
>        public boolean getUseInheritedMethods() {
>            return useInheritedMethods;
>   -    }
>   +    }
> 
>        /**
>         * Turn on or off inherited method WSDL generation.
>   -     */
>   +     */
>        public void setUseInheritedMethods(boolean 
> useInheritedMethods) {
>            this.useInheritedMethods = useInheritedMethods;
>   -    }
>   +    }
> 
>        /**
>         * Set a list of methods NOT to export
>   -     * @param a vector of method name strings
>   -     */
>   +     * @param disallowedMethods vector of method name strings
>   +     */
>        public void setDisallowedMethods(Vector disallowedMethods) {
>            this.disallowedMethods = disallowedMethods;
>        }
> 
>        /**
>         * Set a list of methods NOT to export
>   -     * @param a space separated list of method names
>   -     */
>   +     * @param text space separated list of method names
>   +     */
>        public void setDisallowedMethods(String text) {
>            if (text != null) {
>                StringTokenizer tokenizer = new 
> StringTokenizer(text, " ,
>   +");
>   @@ -1179,7 +1155,7 @@
> 
>        /**
>         * Return list of methods that should not be exported
>   -     */
>   +     */
>        public Vector getDisallowedMethods() {
>            return disallowedMethods;
>        }
>   @@ -1187,33 +1163,33 @@
>        /**
>         * Set a list of classes (fully qualified) that will stop the
>         traversal
>         * of the inheritance tree if encounter in method or 
> complex type
>         generation
>   -     *
>   -     * @param a vector of class name strings
>   -     */
>   -    public void setStopClasses(Vector stopClasses) {
>   +     *
>   +     * @param stopClasses vector of class name strings
>   +     */
>   +    public void setStopClasses(ArrayList stopClasses) {
>            this.stopClasses = stopClasses;
>        }
> 
>        /**
>         * Set a list of classes (fully qualified) that will stop the
>         traversal
>         * of the inheritance tree if encounter in method or 
> complex type
>         generation
>   -     *
>   -     * @param a space separated list of class names
>   -     */
>   +     *
>   +     * @param text space separated list of class names
>   +     */
>        public void setStopClasses(String text) {
>            if (text != null) {
>                StringTokenizer tokenizer = new 
> StringTokenizer(text, " ,
>   +");
>   -            stopClasses = new Vector();
>   +            stopClasses = new ArrayList();
>                while (tokenizer.hasMoreTokens()) {
>                    stopClasses.add(tokenizer.nextToken());
>                }
>            }
>        }
>   -
>   +
>        /**
>         * Return the list of classes which stop inhertance searches
>   -     */
>   -    public Vector getStopClasses() {
>   +     */
>   +    public ArrayList getStopClasses() {
>            return stopClasses;
>        }
> 
>   @@ -1259,9 +1235,9 @@
>        }
> 
>        /**
>   -     * Set the String representation of the interface location URL
>   +     * Set the String representation of the interface location URL
>         * for importing
>   -     * @param locationUrl the String representation of the 
> interface
>   +     * @param importUrl the String representation of the interface
>         * location URL for importing
>         */
>        public void setImportUrl(String importUrl) {
>   @@ -1278,7 +1254,7 @@
> 
>        /**
>         * Set the String representation of the service port name
>   -     * @param serviceUrn the String representation of the 
> service port
>   name
>   +     * @param servicePortName the String representation of 
> the service
>   port name
>         */
>        public void setServicePortName(String servicePortName) {
>            this.servicePortName = servicePortName;
>   @@ -1294,14 +1270,14 @@
> 
>        /**
>         * Set the String representation of the service element name
>   -     * @param serviceUrn the String representation of the service
>   element name
>   +     * @param serviceElementName the String representation of the
>   service element name
>         */
>        public void setServiceElementName(String serviceElementName) {
>            this.serviceElementName = serviceElementName;
>        }
> 
>        /**
>   -     * Returns the String representation of the portType name
>   +     * Returns the String representation of the portType name
>         * @return String representation of the portType name
>         */
>        public String getPortTypeName() {
>   @@ -1309,8 +1285,8 @@
>        }
> 
>        /**
>   -     * Set the String representation of the portType name
>   -     * @param serviceUrn the String representation of the 
> portType name
>   +     * Set the String representation of the portType name
>   +     * @param portTypeName the String representation of 
> the portType
>   name
>         */
>        public void setPortTypeName(String portTypeName) {
>            this.portTypeName = portTypeName;
>   @@ -1386,5 +1362,13 @@
> 
>        public void setMode(int mode) {
>            this.mode = mode;
>   +    }
>   +
>   +    public ServiceDesc getServiceDesc() {
>   +        return serviceDesc;
>   +    }
>   +
>   +    public void setServiceDesc(ServiceDesc serviceDesc) {
>   +        this.serviceDesc = serviceDesc;
>        }
>    }
> 
> 
> 
>   1.3       +2 -2
>   xml-axis/java/src/org/apache/axis/wsdl/fromJava/ExceptionRep.java
> 
>   Index: ExceptionRep.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/Exce
> ptionRep.java,v
> 
>   retrieving revision 1.2
>   retrieving revision 1.3
>   diff -u -r1.2 -r1.3
>   --- ExceptionRep.java 27 Feb 2002 20:31:10 -0000    1.2
>   +++ ExceptionRep.java 1 Apr 2002 20:12:17 -0000     1.3
>   @@ -77,8 +77,8 @@
>        /**
>         * Constructor
>         * Create a default representation of ExceptionRep
>   -     * @param Class name of the exception
>   -     * @param Parameters used in exception class
>   +     * @param name name of the exception
>   +     * @param parameters parameters used in exception class
>         */
>        public ExceptionRep(String name, Vector parameters) {
>            _name = name;
> 
> 
> 
>   1.19      +7 -8
>   xml-axis/java/src/org/apache/axis/wsdl/fromJava/Types.java
> 
>   Index: Types.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/Types.java,v
>   retrieving revision 1.18
>   retrieving revision 1.19
>   diff -u -r1.18 -r1.19
>   --- Types.java  28 Feb 2002 18:50:13 -0000    1.18
>   +++ Types.java  1 Apr 2002 20:12:17 -0000     1.19
>   @@ -83,6 +83,7 @@
>    import java.util.Iterator;
>    import java.util.Map;
>    import java.util.Vector;
>   +import java.util.List;
> 
>    import javax.wsdl.Definition;
>    import javax.wsdl.factory.WSDLFactory;
>   @@ -112,13 +113,12 @@
>        HashMap schemaElementNames = null;
>        HashMap schemaUniqueElementNames = null;
>        BuilderBeanClassRep beanBuilder = null;
>   -    Vector stopClasses = null;
>   +    List stopClasses = null;
> 
>        /**
>         * This class serailizes a <code>Class</code> to XML 
> Schema. The
>         constructor
>         * provides the context for the streamed node within the WSDL
>         document
>         * @param def WSDL Definition Element to declare namespaces
>   -     * @param doc Document element of the WSDL used to create child
>         elements
>         * @param tm TypeMappingRegistry to handle known types
>         * @param defaultTM default TM
>         * @param namespaces user defined or autogenerated 
> namespace and
>         prefix maps
>   @@ -131,7 +131,7 @@
>                     Namespaces namespaces,
>                     String targetNamespace,
>                     Java2WSDLFactory factory,
>   -                 Vector stopClasses) {
>   +                 List stopClasses) {
>            this.def = def;
>            createDocumentFragment();
>            this.tm = tm;
>   @@ -153,7 +153,7 @@
>         * In case of a primitive type, no need to stream out 
> anything, just
>         return
>         * the QName of the primitive type
>         *
>   -     * @param param <code>Class</code> to generate the XML 
> Schema info
>   for
>   +     * @param type <code>Class</code> to generate the XML 
> Schema info
>   for
>         * @return the QName of the generated Schema type, null if void
>         */
>        public QName writePartType(Class type) throws Exception {
>   @@ -453,8 +453,8 @@
>        /**
>         * Write Enumeration Complex Type
>         * (Only supports enumeration classes of string types)
>   -     * @param qname QName of type.
>   -     * @param type class of type
>   +     * @param qName QName of type.
>   +     * @param cls class of type
>         */
>        private void writeEnumType(QName qName, Class cls)  
> throws Exception
>        {
>            if (!isEnumClass(cls))
>   @@ -686,7 +686,6 @@
>         * generated in a previous iteration
>         *
>         * @param qName the name space of the element
>   -     * @param typeName the name of the type
>         * @return if the type is added returns true, else if 
> the type is
>         already present returns false
>         */
>        private boolean addToElementsList (QName qName) {
>   @@ -751,7 +750,7 @@
>        /**
>         * Return the list of classes that we should not emit WSDL for.
>         */
>   -    public Vector getStopClasses() {
>   +    public List getStopClasses() {
>            return stopClasses;
>        }
> 
> 
> 
> 
>   1.20      +104 -128
>   xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaSkelWriter.java
> 
>   Index: JavaSkelWriter.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaSk
> elWriter.java,v
> 
>   retrieving revision 1.19
>   retrieving revision 1.20
>   diff -u -r1.19 -r1.20
>   --- JavaSkelWriter.java     27 Mar 2002 16:46:56 -0000    1.19
>   +++ JavaSkelWriter.java     1 Apr 2002 20:12:17 -0000     1.20
>   @@ -123,59 +123,17 @@
> 
>            // Declare private impl and skeleton base delegates
>            pw.println("    private " + implType + ";");
>   -        pw.println("    private static 
> org.apache.axis.wsdl.SkeletonImpl
>   skel = null;");
>   +        pw.println("    private static java.util.Hashtable 
> _myOperations
>   = new java.util.Hashtable();");
>            pw.println();
>   -
>   -        // Skeleton constructors
>   -        pw.println("    public " + className + "() {");
>   -        pw.println("        this.impl = new " + 
> bEntry.getName() + "Impl
>   ();");
>   -        pw.println("        init();");
>   +        pw.println("    public static
>   org.apache.axis.description.OperationDesc 
> getOperationDescByName(String
>   methodName) {");
>   +        pw.println("        return
>   (org.apache.axis.description.OperationDesc)
>   _myOperations.get(methodName);");
>            pw.println("    }");
>            pw.println();
>   -        pw.println("    public " + className + "(" + 
> implType + ") {");
>   -        pw.println("        this.impl = impl;");
>   -        pw.println("        init();");
>   -        pw.println("    }");
> 
>   -        // Initialize operation parameter names & modes
>   -        pw.println("    public javax.xml.rpc.namespace.QName
>   getParameterName(String opName, int i) {");
>   -        pw.println("        return 
> skel.getParameterName(opName, i);");
>   -        pw.println("    }");
>   -        pw.println();
>   -        pw.println("    public static javax.xml.rpc.namespace.QName
>   getParameterNameStatic(String opName, int i) {");
>   -        pw.println("        init();");
>   -        pw.println("        return 
> skel.getParameterName(opName, i);");
>   -        pw.println("    }");
>   -        pw.println();
>   -        pw.println("    public javax.xml.rpc.ParameterMode
>   getParameterMode(String opName, int i) {");
>   -        pw.println("        return 
> skel.getParameterMode(opName, i);");
>   -        pw.println("    }");
>   -        pw.println();
>   -        pw.println("    public static javax.xml.rpc.ParameterMode
>   getParameterModeStatic(String opName, int i) {");
>   -        pw.println("        init();");
>   -        pw.println("        return 
> skel.getParameterMode(opName, i);");
>   -        pw.println("    }");
>   -        pw.println();
>   -        pw.println("    public static String
>   getInputNamespaceStatic(String opName) {");
>   -        pw.println("        init();");
>   -        pw.println("        return 
> skel.getInputNamespace(opName);");
>   -        pw.println("    }");
>   -        pw.println();
>   -        pw.println("    public static String
>   getOutputNamespaceStatic(String opName) {");
>   -        pw.println("        init();");
>   -        pw.println("        return 
> skel.getOutputNamespace(opName);");
>   -        pw.println("    }");
>   -        pw.println();
>   -        pw.println("    public static String getSOAPAction(String
>   opName) {");
>   -        pw.println("        init();");
>   -        pw.println("        return skel.getSOAPAction(opName);");
>   -        pw.println("    }");
>   -        pw.println();
>            // Initialize operation parameter names
>   -        pw.println("    protected static void init() {");
>   -        pw.println("        if (skel != null) ");
>   -        pw.println("            return;");
>   -        pw.println("        skel = new 
> org.apache.axis.wsdl.SkeletonImpl
>   ();");
>   +        pw.println("    static {");
>   +        pw.println("        
> org.apache.axis.description.OperationDesc
>   _oper;");
>   +        pw.println("        
> org.apache.axis.description.ParameterDesc []
>   _params;");
>            List operations = binding.getBindingOperations();
>            for (int i = 0; i < operations.size(); ++i) {
>                BindingOperation operation = (BindingOperation)
>   operations.get(i);
>   @@ -185,89 +143,99 @@
>                if (parameters != null) {
>                    // The invoked java name of the operation 
> is stored.
>                    String opName =
>                    
> Utils.xmlNameToJava(operation.getOperation().getName());
>   -                pw.println("        skel.add(\"" + opName + "\",");
>   -                pw.println("                 new
>   javax.xml.rpc.namespace.QName[] {");
>   -                if (parameters.returnType != null) {
>   -                    pw.println("                   " +
>   -                               
> Utils.getNewQName(parameters.returnName)
>   + ",");
>   -                } else {
>   -                    pw.println("                   null,");
>   -                }
>   +                pw.println("        _params = new
>   org.apache.axis.description.ParameterDesc [] {");
>   +
>                    for (int j=0; j < parameters.list.size(); j++) {
>                        Parameter p = (Parameter) 
> parameters.list.get(j);
>   -                    pw.println("                   " +
>   +                    String modeStr;
>   +                    switch (p.getMode()) {
>   +                        case Parameter.IN:
>   +                            modeStr
>   = "org.apache.axis.description.ParameterDesc.IN";
>   +                            break;
>   +                        case Parameter.OUT:
>   +                            modeStr
>   = "org.apache.axis.description.ParameterDesc.OUT";
>   +                            break;
>   +                        case Parameter.INOUT:
>   +                            modeStr
>   = "org.apache.axis.description.ParameterDesc.INOUT";
>   +                            break;
>   +                        default:
>   +                            throw new IOException();
>   +                    }
>   +                    pw.println("            new
>   org.apache.axis.description.ParameterDesc(" +
>                           
> Utils.getNewQName(Utils.getAxisQName(p.getQName
>   ())) +
>   -                       ",");
>   +                       ", " + modeStr + ", null),");
>                    }
>   -                pw.println("                 },");
>   -                pw.println("                 new
>   javax.xml.rpc.ParameterMode[] {");
>   +
>   +                pw.println("        };");
>   +//                if (parameters.returnType != null) {
>   +//                    pw.println("                   " +
>   +//
>   Utils.getNewQName(parameters.returnName) + ",");
>   +//                } else {
>   +//                    pw.println("                   null,");
>   +//                }
>   +
>   +//                // Find the input clause's namespace
>   +//                BindingInput input = operation.getBindingInput();
>   +//                if (input == null) {
>   +//                    pw.println("                 null,");
>   +//                }
>   +//                else {
>   +//                    List elems = 
> input.getExtensibilityElements();
>   +//                    boolean found = false;
>   +//                    Iterator it = elems.iterator();
>   +//                    while (!found && it.hasNext()) {
>   +//                        ExtensibilityElement elem
>   = (ExtensibilityElement) it.next();
>   +//                        if (elem instanceof SOAPBody) {
>   +//                            SOAPBody body = (SOAPBody) elem;
>   +//                            String ns = body.getNamespaceURI();
>   +//                            if (ns != null) {
>   +//                                pw.println("             
>     \"" + ns
>   + "\",");
>   +//                                found = true;
>   +//                            }
>   +//                        }
>   +//                    }
>   +//                    if (!found) {
>   +//                        pw.println("                 null,");
>   +//                    }
>   +//                }
>   +//
>   +//                // Find the output clause's namespace
>   +//                BindingOutput output = 
> operation.getBindingOutput();
>   +//                if (output == null) {
>   +//                    pw.println("                 null,");
>   +//                }
>   +//                else {
>   +//                    List elems = 
> output.getExtensibilityElements();
>   +//                    Iterator it = elems.iterator();
>   +//                    boolean found = false;
>   +//                    while (!found && it.hasNext()) {
>   +//                        ExtensibilityElement elem
>   = (ExtensibilityElement) it.next();
>   +//                        if (elem instanceof SOAPBody) {
>   +//                            SOAPBody body = (SOAPBody) elem;
>   +//                            String ns = body.getNamespaceURI();
>   +//                            if (ns != null) {
>   +//                                pw.println("             
>     \"" + ns
>   + "\",");
>   +//                                found = true;
>   +//                            }
>   +//                        }
>   +//                    }
>   +//                    if (!found) {
>   +//                        pw.println("                 null,");
>   +//                    }
>   +//                }
>   +//
>   +//                if (!found) {
>   +//                    pw.println("                 null);");
>   +//                }
>   +                String returnStr;
>                    if (parameters.returnType != null) {
>   -                    pw.println("
>   javax.xml.rpc.ParameterMode.OUT,");
>   +                    returnStr =
>   Utils.getNewQName(parameters.returnName);
>                    } else {
>   -                    pw.println("                   null,");
>   +                    returnStr = "null";
>                    }
>   -                for (int j=0; j < parameters.list.size(); j++) {
>   -                    Parameter p = (Parameter) 
> parameters.list.get(j);
>   -                    if (p.getMode() == Parameter.IN)
>   -                        pw.println("
>   javax.xml.rpc.ParameterMode.IN,");
>   -                    else if (p.getMode() == Parameter.OUT)
>   -                        pw.println("
>   javax.xml.rpc.ParameterMode.INOUT,");
>   -                    else
>   -                        pw.println("
>   javax.xml.rpc.ParameterMode.OUT,");
>   +                pw.println("        _oper = new
>   org.apache.axis.description.OperationDesc(\"" +
>   +                            opName + "\", _params, " + returnStr +
>   ");");
> 
>   -                }
>   -                pw.println("                 },");
>   -
>   -                // Find the input clause's namespace
>   -                BindingInput input = operation.getBindingInput();
>   -                if (input == null) {
>   -                    pw.println("                 null,");
>   -                }
>   -                else {
>   -                    List elems = input.getExtensibilityElements();
>   -                    boolean found = false;
>   -                    Iterator it = elems.iterator();
>   -                    while (!found && it.hasNext()) {
>   -                        ExtensibilityElement elem
>   = (ExtensibilityElement) it.next();
>   -                        if (elem instanceof SOAPBody) {
>   -                            SOAPBody body = (SOAPBody) elem;
>   -                            String ns = body.getNamespaceURI();
>   -                            if (ns != null) {
>   -                                pw.println("               
>   \"" + ns +
>   "\",");
>   -                                found = true;
>   -                            }
>   -                        }
>   -                    }
>   -                    if (!found) {
>   -                        pw.println("                 null,");
>   -                    }
>   -                }
>   -
>   -                // Find the output clause's namespace
>   -                BindingOutput output = 
> operation.getBindingOutput();
>   -                if (output == null) {
>   -                    pw.println("                 null,");
>   -                }
>   -                else {
>   -                    List elems = output.getExtensibilityElements();
>   -                    Iterator it = elems.iterator();
>   -                    boolean found = false;
>   -                    while (!found && it.hasNext()) {
>   -                        ExtensibilityElement elem
>   = (ExtensibilityElement) it.next();
>   -                        if (elem instanceof SOAPBody) {
>   -                            SOAPBody body = (SOAPBody) elem;
>   -                            String ns = body.getNamespaceURI();
>   -                            if (ns != null) {
>   -                                pw.println("               
>   \"" + ns +
>   "\",");
>   -                                found = true;
>   -                            }
>   -                        }
>   -                    }
>   -                    if (!found) {
>   -                        pw.println("                 null,");
>   -                    }
>   -                }
>   -
>                    // Find the SOAPAction.
>                    List elems = operation.getExtensibilityElements();
>                    Iterator it = elems.iterator();
>   @@ -278,18 +246,26 @@
>                            SOAPOperation soapOp = 
> (SOAPOperation) elem;
>                            String action = soapOp.getSoapActionURI();
>                            if (action != null) {
>   -                            pw.println("                 
> \"" + action +
>   "\");");
>   +                            pw.println("        
> _oper.setSoapAction(\""
>   + action + "\");");
>                                found = true;
>                            }
>                        }
>                    }
>   -                if (!found) {
>   -                    pw.println("                 null);");
>   -                }
>   -            }
>   +
>   +                pw.println("        _myOperations.put(\"" 
> + opName + "
>   \", _oper);");
>   +            }
>            }
>            pw.println("    }");
>            pw.println();
>   +
>   +        // Skeleton constructors
>   +        pw.println("    public " + className + "() {");
>   +        pw.println("        this.impl = new " + 
> bEntry.getName() + "Impl
>   ();");
>   +        pw.println("    }");
>   +        pw.println();
>   +        pw.println("    public " + className + "(" + 
> implType + ") {");
>   +        pw.println("        this.impl = impl;");
>   +        pw.println("    }");
> 
>            // Now write each of the operation methods
>            for (int i = 0; i < operations.size(); ++i) {
> 
> 
> 
>   1.7       +15 -3
>   xml-axis/java/test/wsdl/multithread/MultithreadTestCase.java
> 
>   Index: MultithreadTestCase.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/test/wsdl/multithread/MultithreadTestC
> ase.java,v
>   retrieving revision 1.6
>   retrieving revision 1.7
>   diff -u -r1.6 -r1.7
>   --- MultithreadTestCase.java      23 Feb 2002 00:48:28 -0000    1.6
>   +++ MultithreadTestCase.java      1 Apr 2002 20:12:17 -0000     1.7
>   @@ -34,6 +34,12 @@
>                LogFactory.getLog(MultithreadTestCase.class.getName());
> 
>        private AddressBook binding;
>   +    private static int successCount = 0;
>   +
>   +    static synchronized void addSuccess()
>   +    {
>   +        successCount++;
>   +    }
> 
>        public MultithreadTestCase(String name) {
>            super(name);
>   @@ -86,6 +92,8 @@
> 
>                        binding.addEntry("hi", address);
>                        Address addressRet = binding.getAddressFromName
>                        ("hi");
>   +                    // succeeded, count it.
>   +                    addSuccess();
>                    }
>                } catch (Throwable t) {
>                    // There are bound to be connection 
> refused exceptions
>   when the
>   @@ -113,18 +121,22 @@
>            }
>            assertTrue("binding is null", binding != null);
>            ((AddressBookSOAPBindingStub) 
> binding).setMaintainSession(true);
>   -        Thread[] threads = new Thread[100];
>   -        for (int i = 0; i < 100; ++i) {
>   +        int NUM_THREADS = 100;
>   +        Thread[] threads = new Thread[NUM_THREADS];
>   +        for (int i = 0; i < NUM_THREADS; ++i) {
>                threads[i] = new Thread(new Run());
>                threads[i].start();
>            }
>   -        for (int i = 0; i < 100; ++i) {
>   +        for (int i = 0; i < NUM_THREADS; ++i) {
>                try {
>                    threads[i].join();
>                }
>                catch (InterruptedException ie) {
>                }
>            }
>   +        System.out.println("Had " + successCount +
>   +                           " successes (of a possible " +
>   +                           (NUM_THREADS * 4) + ")");
>            if (error != null) {
>                throw error;
>            }
> 
> 
> 
> 
> 

Reply via email to