HI!

OK, please find attached one diff for Beta1 and one for the current build 
(2002-03-25). The Win32 version of CVS had no problems creating the patches.

And please remember to test output parameters.

Regards,
Thomas



> -----Original Message-----
> From: Glyn Normington [mailto:[EMAIL PROTECTED]]
> Sent: Freitag, 22. März 2002 17:48
> To: [EMAIL PROTECTED]
> Subject: Re: Proposed fix for interop problem with .NET 
> client (null as
> parameter)
> 
> 
> Thomas,
> 
> In general it is much safer to send patches as diffs (created 
> using e.g.
> cvs diff -u) so that committers don't accidentally miss 
> pieces of the patch
> (like I did recently!) and are not tempted to replace the 
> whole file and
> destroy recent changes. If you think the changes need more 
> context, send
> the changed file as well as the diff.
> 
> On the other hand, I tried diffing your file against Beta1 
> and the diff
> wasn't useful - it deleted all the old contents and then added the new
> contents, so maybe you had the same experience. I don't know 
> whether the
> changed file can be edited to produce a smaller diff. Maybe 
> others have
> experience here.
> 
> Glyn
> 
> 
diff -u -r1.1.1.1 RPCProvider.java
--- Axis/Beta1/org/apache/axis/providers/java/RPCProvider.java  25 Mar 2002 12:54:11 
-0000      1.1.1.1
+++ Axis/Beta1/org/apache/axis/providers/java/RPCProvider.java  22 Mar 2002 15:50:23 
+-0000
@@ -193,6 +193,35 @@
                         continue;
                 }
                 
+                // We may have overloading or output parameters or null values
+                // that have been omitted. Check for omitted null values.
+                if (params.length > 0 && (argValues == null || params.length != 
+argValues.length)) {
+                    String[] parameterNames = 
+JavaUtils.getParameterNamesFromDebugInfo(method);
+                    Object[] newArgValues = new Object[params.length];
+                    int old = 0;
+                    
+                    // Are there any arguments at all?
+                    if(argValues != null) {
+                        
+                        // Loop over all method parameters
+                        for (int n = 0; n < newArgValues.length; n++) {
+
+                            // If the name matches, then use the supplied value, 
+otherwise the value is null
+                            if 
+(((RPCParam)args.get(old)).getName().equals(parameterNames[n + 1])) {
+                                newArgValues[n] = argValues[old];
+                                old++;
+
+                                // At the end of the supplied arguments -> rest must 
+be null
+                                if(old == argValues.length)
+                                    break;
+                            }
+                        }
+                    }
+                    // Check if all arguments have been used, otherwise something's 
+wrong
+                    if(old == 0 && argValues == null || old == argValues.length)
+                      argValues = newArgValues;
+                }
+                
                 // The number of method parameters must match the 
                 // arguments taking into consideration output parameters.
                 Object[] newArgValues = new Object[params.length];
diff -u Axis/2002-03-25/org/apache/axis/providers/java/RPCProvider.java:1.1 
Axis/2002-03-25/org/apache/axis/providers/java/RPCProvider.java:1.2
--- Axis/2002-03-25/org/apache/axis/providers/java/RPCProvider.java:1.1 Mon Mar 25 
15:18:13 2002
+++ Axis/2002-03-25/org/apache/axis/providers/java/RPCProvider.java     Mon Mar 25 
+15:36:12 2002
@@ -195,6 +195,35 @@
                         continue;
                 }
 
+                // We may have overloading or output parameters or null values
+                // that have been omitted. Check for omitted null values.
+                if (params.length > 0 && (argValues == null || params.length != 
+argValues.length)) {
+                    String[] parameterNames = 
+JavaUtils.getParameterNamesFromDebugInfo(method);
+                    Object[] newArgValues = new Object[params.length];
+                    int old = 0;
+                    
+                    // Are there any arguments at all?
+                    if(argValues != null) {
+                        
+                        // Loop over all method parameters
+                        for (int n = 0; n < newArgValues.length; n++) {
+
+                            // If the name matches, then use the supplied value, 
+otherwise the value is null
+                            if 
+(((RPCParam)args.get(old)).getName().equals(parameterNames[n + 1])) {
+                                newArgValues[n] = argValues[old];
+                                old++;
+
+                                // At the end of the supplied arguments -> rest must 
+be null
+                                if(old == argValues.length)
+                                    break;
+                            }
+                        }
+                    }
+                    // Check if all arguments have been used, otherwise something's 
+wrong
+                    if(old == 0 && argValues == null || old == argValues.length)
+                      argValues = newArgValues;
+                }
+                
                 // The number of method parameters must match the
                 // arguments taking into consideration output parameters.
                 Object[] newArgValues = new Object[params.length];

Reply via email to