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]) );
}
}