dims        2002/10/28 11:37:41

  Modified:    java/samples/client DynamicInvoker.java
  Log:
  Cleanup DynamicInvoker
  
  Revision  Changes    Path
  1.6       +46 -134   xml-axis/java/samples/client/DynamicInvoker.java
  
  Index: DynamicInvoker.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/samples/client/DynamicInvoker.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DynamicInvoker.java       28 Oct 2002 15:22:36 -0000      1.5
  +++ DynamicInvoker.java       28 Oct 2002 19:37:41 -0000      1.6
  @@ -58,17 +58,13 @@
   import org.apache.axis.wsdl.symbolTable.BindingEntry;
   import org.apache.axis.wsdl.symbolTable.Parameter;
   import org.apache.axis.wsdl.symbolTable.Parameters;
  -import org.apache.axis.wsdl.symbolTable.PortTypeEntry;
   import org.apache.axis.wsdl.symbolTable.ServiceEntry;
   import org.apache.axis.wsdl.symbolTable.SymTabEntry;
   import org.apache.axis.wsdl.symbolTable.SymbolTable;
   
   import javax.wsdl.Binding;
  -import javax.wsdl.Input;
   import javax.wsdl.Operation;
  -import javax.wsdl.Output;
   import javax.wsdl.Port;
  -import javax.wsdl.PortType;
   import javax.wsdl.Service;
   import javax.wsdl.extensions.soap.SOAPAddress;
   import javax.xml.namespace.QName;
  @@ -77,14 +73,13 @@
   import java.util.Iterator;
   import java.util.List;
   import java.util.Map;
  -import java.util.StringTokenizer;
   import java.util.Vector;
   
   /**
    * This sample shows how to use Axis for completely dynamic invocations
  - * as it is completely stubless execution. This sample does not support
  - * complex types (it could if there was defined a to encode complex
  - * values as command line arguments).
  + * as it is completely stubless execution. It supports both doc/lit and rpc/encoded
  + * services. But this sample does not support complex types 
  + * (it could if there was defined a to encode complex values as command line 
arguments).
    *
    * @author Davanum Srinivas ([EMAIL PROTECTED])
    */
  @@ -113,7 +108,7 @@
       private static void usage() {
           System.err.println(
                   "Usage: java " + DynamicInvoker.class.getName() + " wsdlLocation "
  -                + "operationName[(portName)]:[inputMessageName]:[outputMessageName] 
"
  +                + "operationName[(portName)] "
                   + "[argument1 ...]");
           System.exit(1);
       }
  @@ -132,51 +127,24 @@
           String wsdlLocation = (args.length > 0)
                   ? args[0]
                   : null;
  -        String operationKey = (args.length > 1)
  +        String operationName = (args.length > 1)
                   ? args[1]
                   : null;
           String portName = null;
  -        String operationName = null;
  -        String inputName = null;
  -        String outputName = null;
  -        StringTokenizer st = new StringTokenizer(operationKey, ":");
  -        int tokens = st.countTokens();
  -        int specType = 0;
  -
  -        if (tokens == 2) {
  -            specType = operationKey.endsWith(":")
  -                    ? 1
  -                    : 2;
  -        } else if ((tokens != 1) && (tokens != 3)) {
  -            usage();
  -        }
  -        while (st.hasMoreTokens()) {
  -            if (operationName == null) {
  -                operationName = st.nextToken();
  -            } else if ((inputName == null) && (specType != 2)) {
  -                inputName = st.nextToken();
  -            } else if (outputName == null) {
  -                outputName = st.nextToken();
  -            } else {
  -                break;
  -            }
  -        }
  -        
           try {
               portName = operationName.substring(operationName.indexOf("(") + 1,
                                                  operationName.indexOf(")"));
               operationName = operationName.substring(0, operationName.indexOf("("));
           } catch (Exception ignored) {
           }
  -        
  +
           DynamicInvoker invoker = new DynamicInvoker(wsdlLocation);
  -        HashMap map = invoker.invokeMethod(operationName, inputName, outputName, 
portName, args);
  +        HashMap map = invoker.invokeMethod(operationName, portName, args);
   
           // print result
           System.out.println("Result:");
           for (Iterator it = map.keySet().iterator(); it.hasNext();) {
               String name = (String) it.next();
  -
               System.out.println(name + "=" + map.get(name));
           }
           System.out.println("\nDone!");
  @@ -197,58 +165,19 @@
        * @throws Exception
        */
       public HashMap invokeMethod(
  -            String operationName, String inputName, String outputName, String 
portName, String[] args)
  +            String operationName, String portName, String[] args)
               throws Exception {
           String serviceNS = null;
           String serviceName = null;
  -        String portTypeNS = null;
  -        String portTypeName = null;
           String operationQName = null;
   
           System.out.println("Preparing Axis dynamic invocation");
           Service service = selectService(serviceNS, serviceName);
  -        PortType portType = selectPortType(portTypeNS, portTypeName);
           Operation operation = null;
           org.apache.axis.client.Service dpf = new 
org.apache.axis.client.Service(wsdlParser, service.getQName());
   
  -        if ((inputName == null) && (outputName == null)) {
  -
  -            // retrieve list of operations
  -            List operationList = portType.getOperations();
  -
  -            // try to find input and output names for the operation specified
  -            boolean found = false;
  -
  -            for (Iterator i = operationList.iterator(); i.hasNext();) {
  -                Operation op = (Operation) i.next();
  -                String name = op.getName();
  -
  -                if (!name.equals(operationName)) {
  -                    continue;
  -                }
  -                if (found) {
  -                    throw new RuntimeException(
  -                            "Operation '" + operationName + "' is overloaded. "
  -                            + "Please specify the operation in the form "
  -                            + "'operationName:inputMessageName:outputMesssageName' 
to distinguish it");
  -                }
  -                found = true;
  -                operation = op;
  -                Input opInput = op.getInput();
  -
  -                inputName = (opInput.getName() == null)
  -                        ? null
  -                        : opInput.getName();
  -                Output opOutput = op.getOutput();
  -
  -                outputName = (opOutput.getName() == null)
  -                        ? null
  -                        : opOutput.getName();
  -            }
  -        }
           Vector inputs = new Vector();
           Port port = selectPort(service.getPorts(), portName);
  -
           if (portName == null) {
               portName = port.getName();
           }
  @@ -271,15 +200,14 @@
   
           while (i.hasNext()) {
               Operation o = (Operation) i.next();
  -
               if (o.getName().equals(operationName)) {
  +                operation = o;
                   parameters = (Parameters) bEntry.getParameters().get(o);
  +                break;
               }
           }
           if ((operation == null) || (parameters == null)) {
  -            throw new RuntimeException("no operation " + operationName
  -                                       + " was found in port type "
  -                                       + portType.getQName());
  +            throw new RuntimeException(operationName + " was not found.");
           }
   
           // loop over paramters and set up in/out params
  @@ -305,7 +233,6 @@
   
           // set output type
           if (parameters.returnParam != null) {
  -
               // Get the QName for the return Type
               QName returnType = org.apache.axis.wsdl.toJava.Utils.getXSIType(
                       parameters.returnParam);
  @@ -314,28 +241,19 @@
               outNames.add(returnQName.getLocalPart());
               addTypeClass(outTypes, returnType.getLocalPart());
           }
  +
  +        if (inNames.size() != args.length - 2)
  +            throw new RuntimeException("Need " + inNames.size() + " arguments!!!");
  +
           for (int pos = 0; pos < inNames.size(); ++pos) {
               String arg = args[pos + 2];
  -            Object value = null;
               Class c = (Class) inTypes.get(pos);
  -
  -            if (c.equals(String.class)) {
  -                value = arg;
  -            } else if (c.equals(Double.TYPE)) {
  -                value = new Double(arg);
  -            } else if (c.equals(Float.TYPE)) {
  -                value = new Float(arg);
  -            } else if (c.equals(Integer.TYPE)) {
  -                value = new Integer(arg);
  -            } else if (c.equals(Boolean.TYPE)) {
  -                value = new Boolean(arg);
  -            } else {
  -                throw new RuntimeException("not know how to convert '" + arg
  -                                           + "' into " + c);
  -            }
  -            inputs.add(value);
  +            inputs.add(getParamData(c, arg));
  +        }
  +        System.out.println("Executing operation " + operationName + " with 
parameters:");
  +        for (int j = 0; j < inputs.size(); j++) {
  +            System.out.println(inNames.get(j) + "=" + inputs.get(j));
           }
  -        System.out.println("Executing operation " + operationName);
           Object ret = call.invoke(inputs.toArray());
           Map outputs = call.getOutputParams();
           HashMap map = new HashMap();
  @@ -354,6 +272,31 @@
       }
   
       /**
  +     * Method getParamData
  +     *
  +     * @param c
  +     * @param arg
  +     */
  +    private Object getParamData(Class c, String arg) {
  +        Object value;
  +        if (c.equals(String.class)) {
  +            value = arg;
  +        } else if (c.equals(Double.TYPE)) {
  +            value = new Double(arg);
  +        } else if (c.equals(Float.TYPE)) {
  +            value = new Float(arg);
  +        } else if (c.equals(Integer.TYPE)) {
  +            value = new Integer(arg);
  +        } else if (c.equals(Boolean.TYPE)) {
  +            value = new Boolean(arg);
  +        } else {
  +            throw new RuntimeException("not know how to convert '" + arg
  +                                       + "' into " + c);
  +        }
  +        return value;
  +    }
  +
  +    /**
        * Method addTypeClass
        *
        * @param v
  @@ -389,14 +332,12 @@
        */
       public Service selectService(String serviceNS, String serviceName)
               throws Exception {
  -
           QName serviceQName = (((serviceNS != null)
                   && (serviceName != null))
                   ? new QName(serviceNS, serviceName)
                   : null);
           ServiceEntry serviceEntry = (ServiceEntry) getSymTabEntry(serviceQName,
                                                                     
ServiceEntry.class);
  -
           return serviceEntry.getService();
       }
   
  @@ -409,7 +350,6 @@
        * @return
        */
       public SymTabEntry getSymTabEntry(QName qname, Class cls) {
  -
           HashMap map = wsdlParser.getSymbolTable().getHashMap();
           Iterator iterator = map.entrySet().iterator();
   
  @@ -429,30 +369,6 @@
               }
           }
           return null;
  -    }    // get
  -
  -    /**
  -     * Method selectPortType
  -     *
  -     * @param def
  -     * @param portTypeNS
  -     * @param portTypeName
  -     *
  -     * @return
  -     *
  -     * @throws Exception
  -     */
  -    public PortType selectPortType(String portTypeNS, String portTypeName)
  -            throws Exception {
  -
  -        QName portTypeQName = (((portTypeNS != null)
  -                && (portTypeName != null))
  -                ? new QName(portTypeNS, portTypeName)
  -                : null);
  -        PortTypeEntry portTypeEntry =
  -                (PortTypeEntry) getSymTabEntry(portTypeQName, PortTypeEntry.class);
  -
  -        return portTypeEntry.getPortType();
       }
   
       /**
  @@ -466,9 +382,7 @@
        * @throws Exception
        */
       public Port selectPort(Map ports, String portName) throws Exception {
  -
           Iterator valueIterator = ports.keySet().iterator();
  -
           while (valueIterator.hasNext()) {
               String name = (String) valueIterator.next();
   
  @@ -478,13 +392,11 @@
   
                   for (int i = 0; (list != null) && (i < list.size()); i++) {
                       Object obj = list.get(i);
  -
                       if (obj instanceof SOAPAddress) {
                           return port;
                       }
                   }
  -            }
  -            if ((name != null) && name.equals(portName)) {
  +            } else if ((name != null) && name.equals(portName)) {
                   return (Port) ports.get(name);
               }
           }
  
  
  


Reply via email to