Author: jsdelfino
Date: Fri Sep 15 15:03:42 2006
New Revision: 446765

URL: http://svn.apache.org/viewvc?view=rev&rev=446765
Log:
Fixed handling of open content /OpenDataObjects in web service requests on the 
client side

Modified:
    
incubator/tuscany/cpp/sca/runtime/extensions/ws/reference/axis2c/src/tuscany/sca/ws/Axis2Client.cpp

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=446765&r1=446764&r2=446765
==============================================================================
--- 
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
 Fri Sep 15 15:03:42 2006
@@ -261,69 +261,150 @@
                     DataFactoryPtr dataFactory = 
compositeReference->getComposite()->getDataFactory();
                     DataObjectPtr requestDO = 
dataFactory->create(wsdlOp.getInputTypeUri().c_str(), 
                         wsdlOp.getInputTypeName().c_str());
-                    
-                    // Each parameter in the operation should be a property on 
the request dataobject
-                    for (int i=0; i<operation.getNParms(); i++)
+
+                    // Go through data object to set the return value
+                    PropertyList pl = requestDO->getType().getProperties();
+                
+                    if(pl.size() == 0)
                     {
-                        Operation::Parameter& parm = operation.getParameter(i);
-                        switch(parm.getType())
+                        if(requestDO->getType().isOpenType() && 
requestDO->getType().isDataObjectType())
                         {
-                        case Operation::BOOL: 
-                            {
-                                requestDO->setBoolean(i, 
*(bool*)parm.getValue());
-                                break;
-                            }
-                        case Operation::SHORT: 
-                            {
-                                requestDO->setShort(i, 
*(short*)parm.getValue());
-                                break;
-                            }
-                        case Operation::LONG: 
-                            {
-                                requestDO->setLong(i, *(long*)parm.getValue());
-                                break;
-                            }
-                        case Operation::USHORT: 
-                            {
-                                requestDO->setInteger(i, *(unsigned 
short*)parm.getValue());
-                                break;
-                            }
-                        case Operation::ULONG: 
-                            {
-                                requestDO->setInteger(i, *(unsigned 
long*)parm.getValue());
-                                break;
-                            }
-                        case Operation::FLOAT: 
-                            {
-                                requestDO->setFloat(i, 
*(float*)parm.getValue());
-                                break;
-                            }
-                        case Operation::DOUBLE: 
-                            {
-                                requestDO->setDouble(i, 
*(double*)parm.getValue());
-                                break;
-                            }
-                        case Operation::LONGDOUBLE: 
-                            {
-                                requestDO->setDouble(i, *(long 
double*)parm.getValue());
-                                break;
-                            }
-                        case Operation::CHARS: 
-                            {
-                                requestDO->setCString(i, 
*(char**)parm.getValue());
-                                break;
-                            }
-                        case Operation::STRING: 
+                            /*
+                             * This code deals with sending xsd:any elements
+                             */
+                            for (int i=0; i<operation.getNParms(); i++)
                             {
-                                requestDO->setCString(i, 
(*(string*)parm.getValue()).c_str());
-                                break;
+                                string pname = "param" + (i+1);
+                                DataObjectList& l = requestDO->getList(pname);
+                                
+                                Operation::Parameter& parm = 
operation.getParameter(i);
+                                switch(parm.getType())
+                                {
+                                case Operation::BOOL: 
+                                    {
+                                        l.append(*(bool*)parm.getValue());
+                                        break;
+                                    }
+                                case Operation::SHORT: 
+                                    {
+                                        l.append(*(short*)parm.getValue());
+                                        break;
+                                    }
+                                case Operation::LONG: 
+                                    {
+                                        l.append(*(long*)parm.getValue());
+                                        break;
+                                    }
+                                case Operation::USHORT: 
+                                    {
+                                        l.append(*(short*)parm.getValue());
+                                        break;
+                                    }
+                                case Operation::ULONG: 
+                                    {
+                                        l.append(*(long*)parm.getValue());
+                                        break;
+                                    }
+                                case Operation::FLOAT: 
+                                    {
+                                        l.append(*(float*)parm.getValue());
+                                        break;
+                                    }
+                                case Operation::DOUBLE: 
+                                    {
+                                        l.append(*(long 
double*)parm.getValue());
+                                        break;
+                                    }
+                                case Operation::LONGDOUBLE: 
+                                    {
+                                        l.append(*(long 
double*)parm.getValue());
+                                        break;
+                                    }
+                                case Operation::CHARS: 
+                                    {
+                                        l.append(*(char**)parm.getValue());
+                                        break;
+                                    }
+                                case Operation::STRING: 
+                                    {
+                                        
l.append((*(string*)parm.getValue()).c_str());
+                                        break;
+                                    }
+                                case Operation::DATAOBJECT: 
+                                    {
+                                        
l.append(*(DataObjectPtr*)parm.getValue());
+                                        break;
+                                    }
+                                default: throw "unsupported parameter type";
+                                }
                             }
-                        case Operation::DATAOBJECT: 
+                        }
+                    }
+                    else {
+                        
+                        // Each parameter in the operation should be a 
property on the request dataobject
+                        for (int i=0; i<operation.getNParms(); i++)
+                        {
+                            Operation::Parameter& parm = 
operation.getParameter(i);
+                            switch(parm.getType())
                             {
-                                requestDO->setDataObject(i, 
*(DataObjectPtr*)parm.getValue());
-                                break;
+                            case Operation::BOOL: 
+                                {
+                                    requestDO->setBoolean(i, 
*(bool*)parm.getValue());
+                                    break;
+                                }
+                            case Operation::SHORT: 
+                                {
+                                    requestDO->setShort(i, 
*(short*)parm.getValue());
+                                    break;
+                                }
+                            case Operation::LONG: 
+                                {
+                                    requestDO->setLong(i, 
*(long*)parm.getValue());
+                                    break;
+                                }
+                            case Operation::USHORT: 
+                                {
+                                    requestDO->setInteger(i, *(unsigned 
short*)parm.getValue());
+                                    break;
+                                }
+                            case Operation::ULONG: 
+                                {
+                                    requestDO->setInteger(i, *(unsigned 
long*)parm.getValue());
+                                    break;
+                                }
+                            case Operation::FLOAT: 
+                                {
+                                    requestDO->setFloat(i, 
*(float*)parm.getValue());
+                                    break;
+                                }
+                            case Operation::DOUBLE: 
+                                {
+                                    requestDO->setDouble(i, 
*(double*)parm.getValue());
+                                    break;
+                                }
+                            case Operation::LONGDOUBLE: 
+                                {
+                                    requestDO->setDouble(i, *(long 
double*)parm.getValue());
+                                    break;
+                                }
+                            case Operation::CHARS: 
+                                {
+                                    requestDO->setCString(i, 
*(char**)parm.getValue());
+                                    break;
+                                }
+                            case Operation::STRING: 
+                                {
+                                    requestDO->setCString(i, 
(*(string*)parm.getValue()).c_str());
+                                    break;
+                                }
+                            case Operation::DATAOBJECT: 
+                                {
+                                    requestDO->setDataObject(i, 
*(DataObjectPtr*)parm.getValue());
+                                    break;
+                                }
+                            default: throw "unsupported parameter type";
                             }
-                        default: throw "unsupported parameter type";
                         }
                     }
                     
@@ -515,7 +596,7 @@
                                         }
                                         else
                                         {
-                                            // Add a complex element DataObject
+                                            // Return a DataObject 
representing a complex element
                                             DataObjectPtr dob = 
sequence->getDataObjectValue(0);
                                             if(!dob)
                                             {



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

Reply via email to