You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by "Samisa Abeysinghe (JIRA)" <ax...@ws.apache.org> on 2005/03/31 13:42:17 UTC
[jira] Assigned: (AXISCPP-465) Bug in SoapSerializer::addOutputParam
[ http://issues.apache.org/jira/browse/AXISCPP-465?page=history ]
Samisa Abeysinghe reassigned AXISCPP-465:
-----------------------------------------
Assign To: Samisa Abeysinghe (was: Roshan Weerasuriya)
> Bug in SoapSerializer::addOutputParam
> -------------------------------------
>
> Key: AXISCPP-465
> URL: http://issues.apache.org/jira/browse/AXISCPP-465
> Project: Axis-C++
> Type: Bug
> Components: Serialization
> Reporter: Roshan Weerasuriya
> Assignee: Samisa Abeysinghe
>
> hi Adrian and All,
> (Adrian this is related to a change which you have done recently)
> There is a problem in SoapSerializer::addOutputParam method. But this is actualy not a bug in this method even though I say so, that is because the following scenario.
> This is the current method...
> int SoapSerializer::addOutputParam(const AxisChar* pchName, void* pValue,
> XSDTYPE type)
> {
> ...
> ....
> case XSD_INT:
> case XSD_BOOLEAN:
> pParam->m_Value.nValue = (int*)(pValue);
> break;
> Now the generated server side wrapper has the following code.
> int CalculatorWrapper::add(void* pMsg)
> {
> ...
> .....
> try
> {
> xsd__int ret = pWs->add(v0,v1);
> return pIWSSZ->addOutputParam("addReturn", (void*)&ret, XSD_INT); //This is wrong because ret is a
> //local variable and we pass the
> //address of this to the method
> }
> catch(...){
> }
> }
> My Suggestion:
> ==============
> There are two ways to tacke this problem.
> method 1)
> Change the SoapSerializer::addOutputParam() method as following.
> ...
> .....
> case XSD_INT:
> case XSD_BOOLEAN:
> //----added by roshan---
> {
> pParam->m_Value.nValue = new int();
> *pParam->m_Value.nValue = *(int*)(pValue);
> //----end added by roshan---
> }
> break;
> method 2)
> Change the wrapper generation to some thing like following:
> int CalculatorWrapper::add(void* pMsg)
> {
> ...
> .....
> try
> {
> xsd__int ret = pWs->add(v0,v1);
> xsd__int* ret2 = new xsd__int(sizeof(ret));
> *ret2 = ret;
> return pIWSSZ->addOutputParam("addReturn", (void*)ret2, XSD_INT);
> I prefer solution method2 because it doesn't look nice and doesn't look more readable to send a local variables address to a another method, any ideas please...
--
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
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira