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 )