[ http://issues.apache.org/jira/browse/AXIS-2002?page=all ]
Venkat Reddy resolved AXIS-2002:
--------------------------------
Resolution: Fixed
> Problem using OUT-parameters
> ----------------------------
>
> Key: AXIS-2002
> URL: http://issues.apache.org/jira/browse/AXIS-2002
> Project: Axis
> Type: Bug
> Versions: 1.2
> Environment: AXIS 1.2 final, running under IBM AIX 5.2, IBM Java 1.4.2,
> TomCat 4.1.30
> Reporter: Søren Jæger Hansen
> Assignee: Venkat Reddy
>
> I've encountered a problem developing AXIS-based webservices. The webservice
> is implemented in AXIS 1.2 final, running under IBM AIX, Java 1.4.2.
> The webservice call is defined to AXIS using a WSDD-file containing:
> ...
> <operation name="GetEntry" returnQType="xsd:void">
> <parameter name="ObjectID" type="xsd:string" mode="in" />
> <parameter name="EntryID" type="xsd:int" mode="inout" />
> <parameter name="Account" type="xsd:string" mode="inout" />
> <parameter name="VoucherDate" type="xsd:string" mode="inout" />
> <parameter name="VoucherNumber" type="xsd:string" mode="inout" />
> <parameter name="VoucherText" type="xsd:string" mode="inout" />
> <parameter name="Amount" type="xsd:double" mode="inout" />
> <parameter name="VATCode" type="xsd:string" mode="inout" />
> <parameter name="CurrencyCode" type="xsd:string" mode="inout" />
> <parameter name="CurrencyAmount" type="xsd:double" mode="inout" />
> <parameter name="Dimension1" type="xsd:string" mode="inout" />
> <parameter name="Dimension2" type="xsd:string" mode="inout" />
> <parameter name="Dimension3" type="xsd:string" mode="inout" />
> <parameter name="Dimension4" type="xsd:string" mode="inout" />
> <parameter name="Dimension5" type="xsd:string" mode="inout" />
> <parameter name="Dimension6" type="xsd:string" mode="inout" />
> <parameter name="Success" type="xsd:int" mode="out" />
> </operation>
> ...
> The problem arises when the webservice is called from VB.NET. It seems that
> VB.NET may exclude empty parameters in the call (ie. if Dimension1-parameter
> above is an empty string, it is not sent in the XML-request, even if the
> parameter is explicitly given in the according WSDL).
> The problem is that OUT-only parameters are kind of "floating" in AXIS. When
> I set up debug logging in log4j.properties, part of the debug output reads as
> follows:
> 20196 [http8081-Processor4] DEBUG org.apache.axis.description.OperationDesc
> - @17c0abbf added parameter >name: Dimension5
> typeEntry: null
> mode: INOUT
> position: 14
> isReturn: false
> typeQName: null
> javaType: null
> inHeader: false
> outHeader: false
> @19e32bbf<total parameters:15
> 20196 [http8081-Processor4] DEBUG org.apache.axis.description.OperationDesc
> - @17c0abbf added parameter >name: Dimension6
> typeEntry: null
> mode: INOUT
> position: 15
> isReturn: false
> typeQName: null
> javaType: null
> inHeader: false
> outHeader: false
> @2e5f6bbf<total parameters:16
> 20196 [http8081-Processor4] DEBUG org.apache.axis.description.OperationDesc
> - @17c0abbf added parameter >name: Success
> typeEntry: null
> mode: OUT
> position: -1
> isReturn: false
> typeQName: null
> javaType: null
> inHeader: false
> outHeader: false
> @213babbf<total parameters:17
> The problem here is "position: -1" in the last ("Success") parameter. It has
> the implication that AXIS does not correctly set up the call to the java stub
> when some of the parameters are missing in the serialized XML request. This
> may cause various errors ranging from parameter mismatch (which are reported
> to the client) to AXIS/TomCat crashes.
> Looking into the org/apache/axis/description/OperationDesc.java code (rev
> 1.43), the following lines are revealed in method addParameter, line 255:
> --------------------------------- OperationDesc.java, line 255:
> parameters.add(param);
> if ((param.getMode() == ParameterDesc.IN) ||
> (param.getMode() == ParameterDesc.INOUT)) {
> param.setOrder(numInParams++);
> }
> if ((param.getMode() == ParameterDesc.OUT) ||
> (param.getMode() == ParameterDesc.INOUT)) {
> numOutParams++;
> }
> ---------------------------------
> Ie. param.setOrder is only called for IN and INOUT parameters. For OUT
> parameters, the order is -1, causing the problems described above.
> I suggest the following code that assigns an ordering to all fields, even if
> they're output-only-parameters. This fix seems to make things work for me:
> --------------------------------- OperationDesc.java, line 255:
> param.setOrder(getNumParams());
> parameters.add(param);
> if ((param.getMode() == ParameterDesc.IN) ||
> (param.getMode() == ParameterDesc.INOUT)) {
> numInParams++;
> }
> if ((param.getMode() == ParameterDesc.OUT) ||
> (param.getMode() == ParameterDesc.INOUT)) {
> numOutParams++;
> }
> ---------------------------------
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira