axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Venkat Reddy (JIRA)" <axis-...@ws.apache.org>
Subject [jira] Resolved: (AXIS-2002) Problem using OUT-parameters
Date Wed, 01 Jun 2005 12:40:53 GMT
     [ 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


Mime
View raw message