Folks,

Currently when xsi:type is missing in the return rpc case we try to get it from the 
Call object
using getParameterTypeByQName(), This assumes that the namespace exists and is valid. 
The enclosed
diff adds another case where the namespace is empty. If getParameterTypeByQName() 
fails to return
a type, use call's getParameterTypeByName and try again. The diff also has a patch for 
Call.java's
getParameterTypeByName to traverse paramNames instead of creating a QName("", 
paramName) and
calling getParameterTypeByQName.

Thanks,
dims


=====
Davanum Srinivas - http://xml.apache.org/~dims/

__________________________________________________
Do You Yahoo!?
Yahoo! Sports - live college hoops coverage
http://sports.yahoo.com/
Index: java/src/org/apache/axis/client/Call.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/Call.java,v
retrieving revision 1.100
diff -d -u -b -B -w -u -r1.100 Call.java
--- java/src/org/apache/axis/client/Call.java   18 Mar 2002 04:03:35 -0000      1.100
+++ java/src/org/apache/axis/client/Call.java   18 Mar 2002 18:02:34 -0000
@@ -684,9 +684,13 @@
      */
     public QName getParameterTypeByName(String paramName) {
         int  i ;
-        QName paramQName = new QName("", paramName);
+        if ( paramNames == null ) return( null );
 
-        return getParameterTypeByQName(paramQName);
+        for (i = 0 ; i< paramNames.size() ; i++ )
+            if ( ((QName)paramNames.get(i)).getLocalPart().equals(paramName) ) {
+                return (QName) paramTypes.get(i);
+            }
+        return( null );
     }
 
     /**
Index: java/src/org/apache/axis/message/RPCHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/RPCHandler.java,v
retrieving revision 1.29
diff -d -u -b -B -w -u -r1.29 RPCHandler.java
--- java/src/org/apache/axis/message/RPCHandler.java    11 Mar 2002 14:25:59 -0000     
 1.29
+++ java/src/org/apache/axis/message/RPCHandler.java    18 Mar 2002 18:02:35 -0000
@@ -156,10 +156,14 @@
             if ( msg != null && msg.getMessageType() == Message.RESPONSE ) {
                 Call c = (Call) msgContext.getProperty( MessageContext.CALL );
                 if ( c != null ) {
-                    // First look for this param by name
+                    // First look for this param by qname
                     QName qname = new QName(namespace, localName);
                     type = c.getParameterTypeByQName(qname);
 
+                    // next look for this param by name
+                    if ( type == null )
+                        type = c.getParameterTypeByName(localName);
+
                     // If we can't find it by name then assume it must
                     // be the return type - is this correct/safe????
                     if ( type == null )

Reply via email to