You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by aj...@apache.org on 2006/09/26 17:04:36 UTC

svn commit: r450074 - in /incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws: Axis2Service.cpp WSServiceProxy.cpp

Author: ajborley
Date: Tue Sep 26 08:04:35 2006
New Revision: 450074

URL: http://svn.apache.org/viewvc?view=rev&rev=450074
Log:
Added checks for NULL/missing data and for initialisation problems

Modified:
    incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/Axis2Service.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp

Modified: incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/Axis2Service.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/Axis2Service.cpp?view=diff&rev=450074&r1=450073&r2=450074
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/Axis2Service.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/Axis2Service.cpp Tue Sep 26 08:04:35 2006
@@ -252,7 +252,11 @@
                         initTuscanyRuntime(env, rootParam, "", service.c_str());
                     }
 
-                    //Utils::printTypes(compositeServiceProxy->getDataFactory());
+                    if(!compositeService)
+                    {
+               		    AXIS2_LOG_ERROR((env)->log, AXIS2_LOG_SI, "Axis2Service_invoke: Tuscany initialisation failed");
+                        return 0;
+                    }
 
                     DataFactoryPtr dataFactory = compositeService->getComposite()->getDataFactory();
                     if (dataFactory == 0)
@@ -330,7 +334,6 @@
                     
                     if (wsdlNamespace == "")
                     {
-                        
                         // Create a default document literal wrapped WSDL operation
                         wsdlNamespace = compositeService->getName();
                         wsdlOperation = WSDLOperation();
@@ -356,8 +359,16 @@
 
                     // Convert the SOAP body to an SDO DataObject
                     AxiomHelper* axiomHelper = AxiomHelper::getHelper();
-                    
-                    DataObjectPtr inputBodyDataObject = axiomHelper->toSdo(body, dataFactory);
+                    DataObjectPtr inputBodyDataObject = NULL;
+
+                    try
+                    {
+                        inputBodyDataObject = axiomHelper->toSdo(body, dataFactory);
+                    }
+                    catch(SDORuntimeException &ex)
+                    {
+                        AXIS2_LOG_ERROR((env)->log, AXIS2_LOG_SI, "Axis2Service_invoke: SDORuntimeException thrown: %s", ex.getMessageText());
+                    }
 
                     if(!inputBodyDataObject)
                     {
@@ -389,6 +400,7 @@
 
                     //  Dispatch to the WS proxy
                     WSServiceProxy* proxy = (WSServiceProxy*)binding->getServiceProxy();
+
                     DataObjectPtr outputDataObject = proxy->invoke(wsdlOperation, inputDataObject);
                     
                     if(!outputDataObject)

Modified: incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp?view=diff&rev=450074&r1=450073&r2=450074
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ws/service/axis2c/src/tuscany/sca/ws/WSServiceProxy.cpp Tue Sep 26 08:04:35 2006
@@ -216,7 +216,16 @@
                                 break;
                             case Type::StringType:
                                 {
-                                    string* stringData = new string(inputDataObject->getCString(pl[i]));
+                                    string* stringData;
+                                    if(inputDataObject->isSet(pl[i]))
+                                    {
+                                        stringData = new string(inputDataObject->getCString(pl[i]));                                        
+                                    }
+                                    else
+                                    {
+                                        // The data is not set, so pass an empty string as the parameter
+                                        stringData = new string();
+                                    }
                                     operation.addParameter(stringData);
                                 }
                                 break;
@@ -523,17 +532,33 @@
                             }
                         case Operation::CHARS: 
                             {
-                                outputDataObject->setCString(pl[i], *(char**)operation.getReturnValue());
+                                if(*(char**)operation.getReturnValue() != NULL)
+                                {
+                                    outputDataObject->setCString(pl[i], *(char**)operation.getReturnValue());
+                                }
+                                else
+                                {
+                                    LOGINFO_1(4, "Return value is NULL, so leaving property %s unset", pl[i].getName());
+                                }
                                 break;
                             }
                         case Operation::STRING: 
                             {
-                                outputDataObject->setCString(pl[i], (*(string*)operation.getReturnValue()).c_str());
+                                outputDataObject->setCString(pl[i], (*(string*)operation.getReturnValue()).c_str());                                
                                 break;
                             }
                         case Operation::DATAOBJECT: 
                             {
-                                outputDataObject->setDataObject(pl[i], *(DataObjectPtr*)operation.getReturnValue());
+
+                                if(*(DataObjectPtr*)operation.getReturnValue() != NULL)
+                                {
+                                    outputDataObject->setDataObject(pl[i], *(DataObjectPtr*)operation.getReturnValue());
+                                }
+                                else
+                                {
+                                    LOGINFO_1(4, "Return value is NULL, so leaving property %s unset", pl[i].getName());
+                                }
+                                
                                 break;
                             }
                         default:



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org