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 "Venkat Reddy (JIRA)" <ax...@ws.apache.org> on 2005/06/01 14:40:53 UTC

[jira] Resolved: (AXIS-2002) Problem using OUT-parameters

     [ 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