You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Glen Daniels <gd...@macromedia.com> on 2002/04/01 22:57:41 UTC
RE: cvs commit: xml-axis/java/test/wsdl/multithread MultithreadTe
stCase.java
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:butek@us.ibm.com]
> Sent: Monday, April 01, 2002 3:41 PM
> To: axis-dev@xml.apache.org
> 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
> butek@us.ibm.com
>
>
> gdaniels@apache.org on 04/01/2002 02:12:17 PM
>
> Please respond to axis-dev@xml.apache.org
>
> To: xml-axis-cvs@apache.org
> 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 apache@apache.org.
> *
> * 5. Products derived from this software may not be called
> "Apache",
> * nor may "Apache" appear in their name, without prior written
> * permission of the Apache Software Foundation.
> *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
> CAUSED AND
> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> LIABILITY,
> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
> ANY WAY OUT
> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> POSSIBILITY OF
> * SUCH DAMAGE.
> *
> ====================================================================
> *
> * This software consists of voluntary contributions made by many
> * individuals on behalf of the Apache Software Foundation.
> For more
> * information on the Apache Software Foundation, please see
> * <http://www.apache.org/>.
> */
>
> package org.apache.axis.description;
>
> import javax.xml.rpc.namespace.QName;
> import java.util.ArrayList;
>
> /**
> *
> * @author Glen Daniels (gdaniels@apache.org)
> */
> 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;
> }
>
>
>
>
>