You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-commits@axis.apache.org by na...@apache.org on 2012/06/18 03:54:27 UTC

svn commit: r1351192 - /axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java

Author: nadiramra
Date: Mon Jun 18 01:54:26 2012
New Revision: 1351192

URL: http://svn.apache.org/viewvc?rev=1351192&view=rev
Log:
AXISCPP-439 Soap faults fail for primitive types 

Modified:
    axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java

Modified: axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java
URL: http://svn.apache.org/viewvc/axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java?rev=1351192&r1=1351191&r2=1351192&view=diff
==============================================================================
--- axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java (original)
+++ axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java Mon Jun 18 01:54:26 2012
@@ -15,11 +15,6 @@
  *   limitations under the License.
  */
 
-/**
- * @author Susantha Kumara(susantha@opensource.lk, skumara@virtusa.com)
- * @author Samisa Abeysinghe (sabeysinghe@virtusa.com)
- */
-
 
 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
 /* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE   */
@@ -754,33 +749,10 @@ public class ClientStubWriter extends CP
         //to get fault info             
         Iterator paramsFault = minfo.getFaultType ().iterator ();
         String faultInfoName = null;
-        String faultType = null;
-        String langName = null;
-        String paramName = null;
         boolean flag = false;
         int j = 0;
         if (!paramsFault.hasNext ())
-        {
-            c_writer.write ("\t\t\tconst char *detail = pSoapFault->getSimpleFaultDetail();\n");
-            c_writer.write ("\t\t\tbool deleteDetail=false;\n\n");
-            c_writer.write ("\t\t\tif (NULL==detail || 0==strlen(detail))\n");
-            c_writer.write ("\t\t\t{\n");
-            c_writer.write ("\t\t\t\tdetail=m_pCall->getFaultAsXMLString();\n");
-            c_writer.write ("\t\t\t\tif (NULL==detail)\n");
-            c_writer.write ("\t\t\t\t\tdetail=\"\";\n");
-            c_writer.write ("\t\t\t\telse\n");
-            c_writer.write ("\t\t\t\t\tdeleteDetail=true;\n");
-            c_writer.write ("\t\t\t}\n\n");
-            c_writer.write ("\t\t\tOtherFaultException ofe(pSoapFault->getFaultcode(),\n");
-            c_writer.write ("\t\t\t\tpSoapFault->getFaultstring(), pSoapFault->getFaultactor(),\n");
-            c_writer.write ("\t\t\t\tdetail, iExceptionCode);\n\n");
-            c_writer.write ("\t\t\tif (deleteDetail && NULL!=detail)\n");
-            c_writer.write ("\t\t\t\tAxis::AxisDelete( (void *) const_cast<char*>(detail), XSD_STRING);\n");
-            c_writer.write ("\n");
-            c_writer.write ("\t\t\tm_pCall->unInitialize();\n");
-            c_writer.write ("\t\t\tdelete pSoapFault;\n");
-            c_writer.write ("\t\t\tthrow ofe;\n");
-        }
+            writeOtherFaultException("");
         else
         {
             flag = true;
@@ -811,17 +783,28 @@ public class ClientStubWriter extends CP
             // FJP - D0004 <                            
     
             ArrayList paramInfo = info.getParams ();
+            boolean printedIF = false;
             for (int i = 0; i < paramInfo.size (); i++)
             {
                 ParameterInfo par = (ParameterInfo) paramInfo.get (i);
-                paramName = par.getParamName ();
-                langName = par.getLangName ();
-                faultType = CUtils.getClassNameFromParamInfoConsideringArrays (par,wscontext);
-                if (j > 1)
+                String langName   = par.getLangName ();
+                String faultType  = CUtils.getClassNameFromParamInfoConsideringArrays (par,wscontext);
+                String faultTypeName = faultType;
+                if (faultType.lastIndexOf('*') != -1)
+                    faultTypeName = faultType.substring(0, faultType.lastIndexOf('*'));
+                
+                // TODO Currently we do not create exception classes for simple types!
+                if (CUtils.isSimpleType (faultTypeName))
+                    continue;
+
+                if (printedIF)
                     c_writer.write ("\t\t\telse if");
                 else
+                {
                     c_writer.write ("\t\t\tif");
-                writeExceptions (faultType, faultInfoName, paramName, langName);
+                    printedIF = true;
+                }
+                writeExceptions (faultTypeName, faultType, faultInfoName, langName);
             }
         }
         
@@ -829,25 +812,9 @@ public class ClientStubWriter extends CP
         {
             c_writer.write ("\t\t\telse\n");
             c_writer.write ("\t\t\t{\n");
-            c_writer.write ("\t\t\t\tconst char *detail = pSoapFault->getSimpleFaultDetail();\n");
-            c_writer.write ("\t\t\t\tbool deleteDetail=false;\n\n");
-            c_writer.write ("\t\t\t\tif (NULL==detail || 0==strlen(detail))\n");
-            c_writer.write ("\t\t\t\t{\n");
-            c_writer.write ("\t\t\t\t\tdetail=m_pCall->getFaultAsXMLString();\n\n");
-            c_writer.write ("\t\t\t\t\tif (NULL==detail)\n");
-            c_writer.write ("\t\t\t\t\t\tdetail=\"\";\n");
-            c_writer.write ("\t\t\t\t\telse\n");
-            c_writer.write ("\t\t\t\t\t\tdeleteDetail=true;\n");
-            c_writer.write ("\t\t\t\t}\n\n");
-            c_writer.write ("\t\t\t\tOtherFaultException ofe(pSoapFault->getFaultcode(),\n");
-            c_writer.write ("\t\t\t\t\tpSoapFault->getFaultstring(), pSoapFault->getFaultactor(),\n");
-            c_writer.write ("\t\t\t\t\tdetail, iExceptionCode);\n\n");
-            c_writer.write ("\t\t\t\tif (deleteDetail && NULL!=detail)\n");
-            c_writer.write ("\t\t\t\t\tAxis::AxisDelete( (void *) const_cast<char*>(detail), XSD_STRING);\n");
-            c_writer.write ("\n");
-            c_writer.write ("\t\t\t\tm_pCall->unInitialize();\n");
-            c_writer.write ("\t\t\t\tdelete pSoapFault;\n");
-            c_writer.write ("\t\t\t\tthrow ofe;\n");
+            
+            writeOtherFaultException("\t");
+
             c_writer.write ("\t\t\t}\n");
         }
         
@@ -865,65 +832,64 @@ public class ClientStubWriter extends CP
     /**
      * Used by literal code too!
      */
-    protected void writeExceptions(String faulttype, 
-                 String faultInfoName,
-                 String paramName, 
-                 String langName) throws WrapperFault
+    private void writeExceptions(String faultTypeName,
+                                 String faulttype, 
+                                 String faultInfoName,
+                                 String langName) throws IOException
     {
-        try
+        c_writer.write("(0 == strcmp(\"" + faultInfoName + "\", pcCmplxFaultName))\n");
+        c_writer.write("\t\t\t{\n");
+        
+        // TODO Simple types we will let it fall through....reason being that this "fix" is being done 
+        // after the fact - that is, we never handled simple types as SOAP fault correctly.
+        // And thus we generated invalid code that does not compile.
+        if (CUtils.isSimpleType (faultTypeName))
         {
-            String faultTypeName;
-            if (faulttype.lastIndexOf('*') != -1)
-                faultTypeName = faulttype.substring(0, faulttype.lastIndexOf('*'));
-            else
-                faultTypeName = faulttype;
-
-            c_writer.write("(0 == strcmp(\"" + faultInfoName + "\", pcCmplxFaultName))\n");
-            c_writer.write("\t\t\t{\n");
-            
-            boolean issimple = CUtils.isSimpleType (faultTypeName);
-            
-            // Simple type we convert to string....reason being that this "fix" is being done 
-            // after the fact - that is, we never handled simple types as SOAP fault correctly.
-            if (issimple)
-            {
-                c_writer.write("\t\t\t\t" + "xsd__string pFaultDetail =  m_pCall->getElementAsString(\n");
-                c_writer.write("\t\t\t\t\t\t\"" + faultInfoName + "\",\n");
-                c_writer.write("\t\t\t\t\t\t0);\n\n");
-                c_writer.write ("\t\t\t\tOtherFaultException ofe(pSoapFault->getFaultcode(),\n");
-                c_writer.write ("\t\t\t\t\tpSoapFault->getFaultstring(), pSoapFault->getFaultactor(),\n");
-                c_writer.write ("\t\t\t\t\tpFaultDetail, iExceptionCode);\n\n");
-                c_writer.write ("\t\t\t\tAxis::AxisDelete( (void *) pFaultDetail, XSD_STRING);\n");
-                c_writer.write ("\n");
-                c_writer.write ("\t\t\t\tm_pCall->unInitialize();\n");
-                c_writer.write ("\t\t\t\tdelete pSoapFault;\n");
-                c_writer.write ("\t\t\t\tthrow ofe;\n");
-            }
-            else
-            {
-                c_writer.write("\t\t\t\t" + faulttype + " pFaultDetail = \n");
-                c_writer.write("\t\t\t\t\t(" + faulttype + ")pSoapFault->getCmplxFaultObject(\n");
-                c_writer.write("\t\t\t\t\t\t(void*) Axis_DeSerialize_" + langName + ",\n");
-                c_writer.write("\t\t\t\t\t\t(void*) Axis_Create_" + langName + ",\n");
-                c_writer.write("\t\t\t\t\t\t(void*) Axis_Delete_" + langName + ",\n");
-                c_writer.write("\t\t\t\t\t\t\"" + faultInfoName + "\",\n");
-                c_writer.write("\t\t\t\t\t\t0);\n\n");
-                c_writer.write("\t\t\t\tpFaultDetail->setFaultCode(pSoapFault->getFaultcode());\n");
-                c_writer.write("\t\t\t\tpFaultDetail->setFaultString(pSoapFault->getFaultstring());\n");
-                c_writer.write("\t\t\t\tpFaultDetail->setFaultActor(pSoapFault->getFaultactor());\n");
-                c_writer.write("\t\t\t\tpFaultDetail->setExceptionCode(e.getExceptionCode());\n");
-                c_writer.write("\t\t\t\tm_pCall->unInitialize();\n");
-                c_writer.write ("\t\t\t\tdelete pSoapFault;\n");
-                c_writer.write ("\t\t\t\t" + faultTypeName + " fault = *pFaultDetail;\n");
-                c_writer.write ("\t\t\t\tdelete pFaultDetail;\n");
-                c_writer.write ("\t\t\t\tthrow fault;\n");            
-            }
-            
-            c_writer.write("\t\t\t}\n");
-        } 
-        catch (IOException e)
+            // TODO use simple exception class....
+        }
+        else
         {
-            throw new WrapperFault(e);
+            c_writer.write("\t\t\t\t" + faulttype + " pFaultDetail = \n");
+            c_writer.write("\t\t\t\t\t(" + faulttype + ")pSoapFault->getCmplxFaultObject(\n");
+            c_writer.write("\t\t\t\t\t\t(void*) Axis_DeSerialize_" + langName + ",\n");
+            c_writer.write("\t\t\t\t\t\t(void*) Axis_Create_" + langName + ",\n");
+            c_writer.write("\t\t\t\t\t\t(void*) Axis_Delete_" + langName + ",\n");
+            c_writer.write("\t\t\t\t\t\t\"" + faultInfoName + "\",\n");
+            c_writer.write("\t\t\t\t\t\t0);\n\n");
+            c_writer.write("\t\t\t\tpFaultDetail->setFaultCode(pSoapFault->getFaultcode());\n");
+            c_writer.write("\t\t\t\tpFaultDetail->setFaultString(pSoapFault->getFaultstring());\n");
+            c_writer.write("\t\t\t\tpFaultDetail->setFaultActor(pSoapFault->getFaultactor());\n");
+            c_writer.write("\t\t\t\tpFaultDetail->setExceptionCode(e.getExceptionCode());\n");
+            c_writer.write("\t\t\t\tm_pCall->unInitialize();\n");
+            c_writer.write ("\t\t\t\tdelete pSoapFault;\n");
+            c_writer.write ("\t\t\t\t" + faultTypeName + " fault = *pFaultDetail;\n");
+            c_writer.write ("\t\t\t\tdelete pFaultDetail;\n");
+            c_writer.write ("\t\t\t\tthrow fault;\n");            
         }
+        
+        c_writer.write("\t\t\t}\n");
+    }
+    
+    private void writeOtherFaultException(String tabs) throws IOException
+    {
+        c_writer.write (tabs + "\t\t\tconst char *detail = pSoapFault->getSimpleFaultDetail();\n");
+        c_writer.write (tabs + "\t\t\tbool deleteDetail=false;\n\n");
+        c_writer.write (tabs + "\t\t\tif (NULL==detail || 0==strlen(detail))\n");
+        c_writer.write (tabs + "\t\t\t{\n");
+        c_writer.write (tabs + "\t\t\t\tdetail=m_pCall->getFaultAsXMLString();\n");
+        c_writer.write (tabs + "\t\t\t\tif (NULL==detail)\n");
+        c_writer.write (tabs + "\t\t\t\t\tdetail=\"\";\n");
+        c_writer.write (tabs + "\t\t\t\telse\n");
+        c_writer.write (tabs + "\t\t\t\t\tdeleteDetail=true;\n");
+        c_writer.write (tabs + "\t\t\t}\n\n");
+        c_writer.write (tabs + "\t\t\tOtherFaultException ofe(pSoapFault->getFaultcode(),\n");
+        c_writer.write (tabs + "\t\t\t\tpSoapFault->getFaultstring(), pSoapFault->getFaultactor(),\n");
+        c_writer.write (tabs + "\t\t\t\tdetail, iExceptionCode);\n\n");
+        c_writer.write (tabs + "\t\t\tif (deleteDetail && NULL!=detail)\n");
+        c_writer.write (tabs + "\t\t\t\tAxis::AxisDelete( (void *) const_cast<char*>(detail), XSD_STRING);\n");
+        c_writer.write (tabs + "\n");
+        c_writer.write (tabs + "\t\t\tm_pCall->unInitialize();\n");
+        c_writer.write (tabs + "\t\t\tdelete pSoapFault;\n");
+        c_writer.write (tabs + "\t\t\tthrow ofe;\n");
     }
 }