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 bu...@apache.org on 2002/10/15 16:08:45 UTC

DO NOT REPLY [Bug 13646] New: - WSIFOperation_ApacheAxis fails to set up Call's Parameter list

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13646>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13646

WSIFOperation_ApacheAxis fails to set up Call's Parameter list

           Summary: WSIFOperation_ApacheAxis fails to set up Call's
                    Parameter list
           Product: Axis
           Version: current (nightly)
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Basic Architecture
        AssignedTo: axis-dev@xml.apache.org
        ReportedBy: jgreif@alumni.princeton.edu


I have a version of the WSIF DynamicInvoker client which handles complex types 
on input and output.  A single Java class (wrapping a DOM Element and a QName 
for its type) serves for all these, and serializer/deserializers are registered 
on the Call object's TypeMapping.

During the generation of the SOAP envelope, bogus elements are generated named 
arg<i> where i is the 0-based position in the parameter list, wrapping the 
correct form of each input parameter.  These arg<i> can have incorrect xsi:type 
attributes which arise from looking up the single Java class in the type 
mapping without a corresponding xml type QName.

What appears to be going wrong is this:
The addition of the bogus arg0 element to the SOAP envelope comes during the 
invocation of client.Call.invoke(namespace,method,args).  Here, the code 
attempts to turn the body into an RPCElement, processing the arguments using 
Call.getParamList(args).  But nobody has remembered to set up the parameters of 
the Call object, so the args are returned unmodified from getParamList, rather 
than as a list of properly set up RPCParams.  The RPCElement constructor 
invents the element name "argi" for the ith argument if that is not a proper 
RPCParam.

This appears to be a bug in WSIFOperation_ApacheAxis.prepare() or 
WSIFOperation_ApacheAxis.invokeRequestResponseOperation, more likely the 
latter, one of which should build up the Parameter descriptors and return type 
descriptors on the Call object. I suggest the latter because the part 
descriptors on the input and output messages hold most the necessary info. 
Calling Call.setOperation would be only a quick fix, since the WSIFOperation 
and its associated input and output WSIFMessage objects already hold the 
detailed information about the types and stuff, and has done overload 
resolution and the like which is superior to what Call.setOperation will do.

I will attach the correct SOAP envelope (the Body is the crucial part) produced 
by the WSIFOperation_ApacheSOAP, and two incorrect ones (for each possible 
setting of the property org.apache.axis.AxisEngine.PROP_DOMULTIREFS.  In the 
incorrect versions, the type of the bogus arg0 element is ProductInfo, which is 
the return type, rather than KeywordRequest, which is correct.  The test occurs 
on Amazon's service using 
http://soap.amazon.com/schemas2/AmazonWebServices.wsdl and the operation 
KeywordSearchRequest.