Author: jsdelfino
Date: Tue Sep 12 11:00:08 2006
New Revision: 442660

URL: http://svn.apache.org/viewvc?view=rev&rev=442660
Log:
Axis2Client now sets the return value into the invoked Operation object without 
having to rely on the fact that the client knew the return type ahead of time. 
Generated CPP proxies get the correct return value out the Operation object and 
do not assume anymore that it is stored in the placeholder that they set into 
it before calling invoke()

Modified:
    
incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp
    
incubator/tuscany/cpp/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl

Modified: 
incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp?view=diff&rev=442660&r1=442659&r2=442660
==============================================================================
--- 
incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp
 (original)
+++ 
incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp
 Tue Sep 12 11:00:08 2006
@@ -380,66 +380,148 @@
                      AxiomHelper myHelper;
                      DataObjectPtr returnDO = myHelper.toSdo(ret_node, 
dataFactory);
                      
-                     unsigned int index = 0;
-                     switch(operation.getReturnType())
-                     {
-                     case Operation::BOOL: 
-                         {
-                             *(bool*)operation.getReturnValue() = 
returnDO->getBoolean(index);
-                             break;
-                         }
-                     case Operation::SHORT: 
-                         {
-                             *(short*)operation.getReturnValue() = 
returnDO->getShort(index);
-                             break;
-                         }
-                     case Operation::LONG: 
-                         {
-                             *(long*)operation.getReturnValue() = 
returnDO->getLong(index);
-                             break;
-                         }
-                     case Operation::USHORT: 
-                         {
-                             *(unsigned short*)operation.getReturnValue() = 
(unsigned short)returnDO->getInteger(index);
-                             break;
-                         }
-                     case Operation::ULONG: 
-                         {
-                             *(unsigned long*)operation.getReturnValue() = 
(unsigned long)returnDO->getInteger(index);
-                             break;
-                         }
-                     case Operation::FLOAT: 
-                         {
-                             *(float*)operation.getReturnValue() = 
returnDO->getFloat(index);
-                             break;
-                         }
-                     case Operation::DOUBLE: 
-                         {
-                             *(double*)operation.getReturnValue() = 
returnDO->getDouble(index);
-                             break;
-                         }
-                     case Operation::LONGDOUBLE: 
-                         {
-                             *(long double*)operation.getReturnValue() = 
returnDO->getDouble(index);
-                             break;
-                         }
-                     case Operation::CHARS: 
-                         {
-                             *(char**)operation.getReturnValue() = 
strdup(returnDO->getCString(index));
-                             break;
-                         }
-                     case Operation::STRING: 
-                         {
-                             *(string*)operation.getReturnValue() = 
returnDO->getCString(index);
-                             break;
-                         }
-                     case Operation::DATAOBJECT: 
-                         {
-                             *(DataObjectPtr*)operation.getReturnValue() = 
returnDO->getDataObject(index);
-                             break;
-                         }
-                     default:;
-                     }
+                    PropertyList pl = returnDO->getInstanceProperties();
+                    unsigned int i = 0;
+                     
+                    switch(pl[i].getTypeEnum())
+                    {
+                    case Type::BooleanType:
+                        {
+                            bool* boolData = new bool;
+                            *boolData = returnDO->getBoolean(pl[i]);
+                            //printf("returnDO has BooleanType named %s with 
value %d\n", name, boolData);
+                            operation.setReturnValue(boolData);
+                        }
+                        break;
+                    case Type::ByteType:
+                        {
+                            char* byteData = new char;
+                            //printf("returnDO has ByteType named %s\n", name);
+                            *byteData = returnDO->getByte(pl[i]);
+                            operation.setReturnValue(byteData);
+                        }
+                        break;
+                    case Type::BytesType:
+                        {
+                            int len = returnDO->getLength(pl[i]);
+                            char* bytesData = new char[len+1];
+                            int bytesWritten = returnDO->getBytes(pl[i], 
bytesData, len);
+                            // Ensure the bytes end with the null char. Not 
sure if this is neccessary
+                            if(bytesWritten <= len)
+                            {
+                                bytesData[bytesWritten] = 0;
+                            }
+                            else
+                            {
+                                bytesData[len] = 0;
+                            }
+                            //printf("returnDO has BytesType named %s with 
length %d\n", name, bytesWritten);
+                            operation.setReturnValue(&bytesData);
+                        }
+                        break;
+                    case Type::CharacterType:
+                        {
+                            // This code should work but won't be used as 
there is no mapping from an XSD type to the SDO CharacterType
+                            wchar_t* charData = new wchar_t;
+                            //printf("returnDO has CharacterType named %s\n", 
name);
+                            *charData = returnDO->getCharacter(pl[i]);
+                            operation.setReturnValue(charData);
+                        }
+                        break;
+                    case Type::DoubleType:
+                        {
+                            long double* doubleData = new long double;
+                            *doubleData = returnDO->getDouble(pl[i]);
+                            //printf("returnDO has DoubleType named %s\n", 
name);            
+                            operation.setReturnValue(doubleData);
+                        }
+                        break;
+                    case Type::FloatType:
+                        {
+                            float* floatData = new float;
+                            *floatData = returnDO->getFloat(pl[i]);
+                            //printf("returnDO has FloatType named %s with 
value %f\n", name, *floatData);
+                            operation.setReturnValue(floatData); 
+                        }
+                        break;
+                    case Type::IntegerType:
+                        {
+                            long* intData = new long;
+                            //printf("returnDO has IntegerType named %s\n", 
name);
+                            *intData = returnDO->getInteger(pl[i]);
+                            operation.setReturnValue(intData);
+                        }
+                        break;
+                    case Type::ShortType:
+                        {
+                            short* shortData = new short;
+                            //printf("returnDO has ShortType named %s\n", 
name);
+                            *shortData = returnDO->getShort(pl[i]);
+                            operation.setReturnValue(shortData);
+                        }
+                        break;
+                    case Type::StringType:
+                        {
+                            const char** stringData = new const char*; 
+                            string* str = new 
string(returnDO->getCString(pl[i]));
+                            *stringData = str->c_str();
+                            //printf("returnDO has StringType named %s with 
value %s\n", name, stringData);
+                            operation.setReturnValue(stringData);
+                        }
+                        break;
+                    case Type::DataObjectType:
+                        {
+                            DataObjectPtr dataObjectData = 
returnDO->getDataObject(pl[i]);
+                            //printf("returnDO has DataObjectType named %s 
(#%d)\n", name, dataObjectData);
+            
+                            if(!dataObjectData)
+                            {
+                                LOGINFO(4, "SDO DataObject return value was 
null");
+                            }
+                            operation.setReturnValue(&dataObjectData);
+                        }
+                        break;
+                    case Type::OpenDataObjectType:
+                        {         
+                            /*
+                             * This code deals with xsd:any element parameters
+                             * Get each element as a DataObject and add in to 
the parameter list
+                             */
+            
+                            //printf("returnDO has OpenDataObjectType named 
%s\n", name);
+                            DataObjectList& dataObjectList = 
returnDO->getList(pl[i]);
+                            
+                            for(int j=0; j<dataObjectList.size(); j++)
+                            {
+                                DataObjectPtr dataObjectData = 
dataObjectList[j];
+                                if(!dataObjectData)
+                                {
+                                    LOGINFO(4, "SDO OpenDataObject return 
value was null");
+                                }
+                                operation.setReturnValue(&dataObjectData);
+                                //Utils::printDO(dataObjectData);
+                            }
+                        }
+                        break;
+                    case Type::DateType:
+                        LOGERROR(0, "SDO DateType return values are not yet 
supported");
+                        break;
+                    case Type::LongType:
+                        LOGERROR(0, "SDO LongType (int64_t) return values are 
not yet supported");
+                        break;
+                    case Type::UriType:
+                        LOGERROR(0, "SDO UriType return values are not yet 
supported");
+                        break;
+                    case Type::BigDecimalType:
+                        LOGERROR(0, "SDO BigDecimalType return values are not 
yet supported");
+                        break;
+                    case Type::BigIntegerType:
+                        LOGERROR(0, "SDO BigIntegerType return values are not 
yet supported");
+                        break;
+                    default:
+                        LOGERROR(0, "Unknown SDO type has been found in return 
value. Unknown types are not yet supported");
+                        break;
+                    }         
                  }
                  else
                  {

Modified: 
incubator/tuscany/cpp/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl?view=diff&rev=442660&r1=442659&r2=442660
==============================================================================
--- 
incubator/tuscany/cpp/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl
 (original)
+++ 
incubator/tuscany/cpp/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl
 Tue Sep 12 11:00:08 2006
@@ -237,7 +237,7 @@
         </xsl:when>
         <xsl:otherwise><!-- simple type -->
         <xsl:text>
-    return ret;</xsl:text>
+    return *(</xsl:text><xsl:value-of 
select="$type"/><xsl:text>*)operation.getReturnValue();</xsl:text>
         </xsl:otherwise>
     </xsl:choose>
 </xsl:template>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to