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 gd...@apache.org on 2002/05/10 15:22:00 UTC

cvs commit: xml-axis/java/src/org/apache/axis/providers/java RPCProvider.java

gdaniels    02/05/10 06:22:00

  Modified:    java/src/org/apache/axis/providers/java RPCProvider.java
  Log:
  Remove "boxcarring" code to fix a bug and clean up RPCProvider
  semantics.  Note that a "BoxcarProvider" could easily be written to
  supply this functionality if desired.
  
  Fixes http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8782
  
  Revision  Changes    Path
  1.57      +58 -60    xml-axis/java/src/org/apache/axis/providers/java/RPCProvider.java
  
  Index: RPCProvider.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/providers/java/RPCProvider.java,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -u -r1.56 -r1.57
  --- RPCProvider.java	9 May 2002 18:25:18 -0000	1.56
  +++ RPCProvider.java	10 May 2002 13:22:00 -0000	1.57
  @@ -112,12 +112,10 @@
               log.debug(JavaUtils.getMessage("bodyIs00", "" + bodies.get(0)));
           }
   
  -        /* Loop over each entry in the SOAPBody - each one is a different */
  -        /* RPC call.                                                      */
  -        /******************************************************************/
  -        for ( int bNum = 0 ; bNum < bodies.size() ; bNum++ ) {
  -            RPCElement   body;
  +        RPCElement   body = null;
   
  +        // Find the first "root" body element, which is the RPC call.
  +        for ( int bNum = 0 ; body == null && bNum < bodies.size() ; bNum++ ) {
               // If this is a regular old SOAPBodyElement, and it's a root,
               // we're probably a non-wrapped doc/lit service.  In this case,
               // we deserialize the element, and create an RPCElement "wrapper"
  @@ -137,67 +135,67 @@
                                                 operation.getName(),
                                                 new Object [] { val });
                       }
  -                    else continue;
  -                } else {
  -                    continue;
                   }
               } else {
                   body = (RPCElement) bodies.get( bNum );
               }
  +        }
   
  -            String methodName = body.getMethodName();
  -            Vector args = body.getParams();
  -            int numArgs = args.size();
  -
  -            // This may have changed, so get it again...
  -            // FIXME (there should be a cleaner way to do this)
  -            operation = msgContext.getOperation();
  -
  -            if (operation == null) {
  -                QName qname = new QName(body.getNamespaceURI(),
  -                                        body.getName());
  -                operation = serviceDesc.getOperationByElementQName(qname);
  -            }
  -
  -            if (operation == null) {
  -                throw new AxisFault(JavaUtils.getMessage("noSuchOperation",
  -                                                         methodName));
  -            }
  -
  -            // Create the array we'll use to hold the actual parameter
  -            // values.  We know how big to make it from the metadata.
  -            Object[]     argValues  =  new Object [operation.getNumParams()];
  -
  -            // A place to keep track of the out params (INOUTs and OUTs)
  -            ArrayList outs = new ArrayList();
  -
  -            // Put the values contained in the RPCParams into an array
  -            // suitable for passing to java.lang.reflect.Method.invoke()
  -            // Make sure we respect parameter ordering if we know about it
  -            // from metadata, and handle whatever conversions are necessary
  -            // (values -> Holders, etc)
  -            if ( args != null && args.size() > 0 ) {
  -                for ( int i = 0 ; i < numArgs ; i++ ) {
  -                    RPCParam rpcParam = (RPCParam)args.get(i);
  -                    Object value = rpcParam.getValue();
  -                    ParameterDesc paramDesc = rpcParam.getParamDesc();
  -                    if (paramDesc != null && paramDesc.getJavaType() != null) {
  -                        value = JavaUtils.convert(value,
  -                                                  paramDesc.getJavaType());
  -                        rpcParam.setValue(value);
  -                        if (paramDesc.getMode() == ParameterDesc.INOUT)
  -                            outs.add(rpcParam);
  -                    }
  -                    if (paramDesc == null || paramDesc.getOrder() == -1) {
  -                        argValues[i]  = value;
  -                    } else {
  -                        argValues[paramDesc.getOrder()] = value;
  -                    }
  +        if (body == null) {
  +            // throw something
  +        }
  +        String methodName = body.getMethodName();
  +        Vector args = body.getParams();
  +        int numArgs = args.size();
  +
  +        // This may have changed, so get it again...
  +        // FIXME (there should be a cleaner way to do this)
  +        operation = msgContext.getOperation();
  +
  +        if (operation == null) {
  +            QName qname = new QName(body.getNamespaceURI(),
  +                                    body.getName());
  +            operation = serviceDesc.getOperationByElementQName(qname);
  +        }
  +
  +        if (operation == null) {
  +            throw new AxisFault(JavaUtils.getMessage("noSuchOperation",
  +                                                     methodName));
  +        }
  +
  +        // Create the array we'll use to hold the actual parameter
  +        // values.  We know how big to make it from the metadata.
  +        Object[]     argValues  =  new Object [operation.getNumParams()];
  +
  +        // A place to keep track of the out params (INOUTs and OUTs)
  +        ArrayList outs = new ArrayList();
  +
  +        // Put the values contained in the RPCParams into an array
  +        // suitable for passing to java.lang.reflect.Method.invoke()
  +        // Make sure we respect parameter ordering if we know about it
  +        // from metadata, and handle whatever conversions are necessary
  +        // (values -> Holders, etc)
  +        if ( args != null && args.size() > 0 ) {
  +            for ( int i = 0 ; i < numArgs ; i++ ) {
  +                RPCParam rpcParam = (RPCParam)args.get(i);
  +                Object value = rpcParam.getValue();
  +                ParameterDesc paramDesc = rpcParam.getParamDesc();
  +                if (paramDesc != null && paramDesc.getJavaType() != null) {
  +                    value = JavaUtils.convert(value,
  +                                              paramDesc.getJavaType());
  +                    rpcParam.setValue(value);
  +                    if (paramDesc.getMode() == ParameterDesc.INOUT)
  +                        outs.add(rpcParam);
  +                }
  +                if (paramDesc == null || paramDesc.getOrder() == -1) {
  +                    argValues[i]  = value;
  +                } else {
  +                    argValues[paramDesc.getOrder()] = value;
  +                }
   
  -                    if (log.isDebugEnabled()) {
  -                        log.debug("  " + JavaUtils.getMessage("value00",
  -                            "" + argValues[i]) );
  -                    }
  +                if (log.isDebugEnabled()) {
  +                    log.debug("  " + JavaUtils.getMessage("value00",
  +                                                          "" + argValues[i]) );
                   }
               }