axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Xiong (JIRA)" <axis-c-...@ws.apache.org>
Subject [jira] Created: (AXISCPP-972) axis-c deserializer has a problem:
Date Mon, 05 Jun 2006 03:09:29 GMT
axis-c deserializer: IWrapperSoapDeSerializer::getChardataAs 's
 declaration and definition should be changed as by reference, not by value,
 in order to output the required value by it's parameter pValue.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

axis-c deserializer has a problem: 
axis-c deserializer: IWrapperSoapDeSerializer::getChardataAs 's declaration and definition
should be changed as by reference, not by value, in order to output the required value by
it's parameter pValue.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

         Key: AXISCPP-972
         URL: http://issues.apache.org/jira/browse/AXISCPP-972
     Project: Axis-C++
        Type: Bug

  Components: Server - Deserialization  
    Versions:  1.6 Beta    
 Environment:   	 Platform:
        Linux fedora 3.0
Axis version:
        Server-side Axis C++ 1.6Beta
XML Parser Lib:
xersesc 2.6
WSDL2ws tool by using axis java 1.3
Client-side version Axis java 1.3
Http Server Version:
Apache 2.0.53
Tomcat 2.0.58
    Reporter: Michael Xiong
    Priority: Critical


axis-c deserializer has a problem: 
IWrapperSoapDeSerializer::getChardataAs 's declaration and definition should be changed into
by reference, not by value, in order to output the required value by parameter pValue.

IWrapperSoapDeSerializer has declared an interface like the below:
    virtual void getChardataAs(void* pValue, XSDTYPE type)=0;

This interface is implemented in the class SoapDeSerializer like the below:
SoapDeSerializer::getChardataAs (void *pValue, XSDTYPE type)
{
... ...
        pValue = pSimpleType->getValue();
... ...
}

>From the code inside SoapDeSerializer::getChardataAs, you can see that the required value
can not been really output by pValue for the pValue here is indeed  a pointer in local stack.

If you want to output the requireed value by pValue, you should declare and define it by reference,
not by value. 

The suggested solution of mine is like the below:

In include/axis/IWrapperSoapDeSerializer.hpp
change the interface(getChardataAs)'s declaration into:
   virtual void getChardataAs(void*& pValue, XSDTYPE type)=0;

In src/soap/SoapDeserializer.h, change the method(SoapDeSerializer::getChardataAs)'s declaration
into:
    void getChardataAs(void*& pValue, XSDTYPE type);

In src/soap/SoapDeserializer.cpp, change the method(SoapDeSerializer::getChardataAs)'s definition
into:
SoapDeSerializer::getChardataAs (void *& pValue, XSDTYPE type)
{
... 
}

Please notice that only the method's signature need to be corrected, the internal code logic
can remain no change.

And correspondingly, the WSDL2WS generated code framework need to be corrected in the corresponding
place. Detail please wait for another bug which I will reported for WSDL2WS later.

I've verified my solution on axis-c-1.6beta, it's OK.

-- 
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


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-dev-help@ws.apache.org


Mime
View raw message