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/16 00:01:05 UTC

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

Author: nadiramra
Date: Fri Jun 15 22:01:05 2012
New Revision: 1350820

URL: http://svn.apache.org/viewvc?rev=1350820&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=1350820&r1=1350819&r2=1350820&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 Fri Jun 15 22:01:05 2012
@@ -818,15 +818,10 @@ public class ClientStubWriter extends CP
                 langName = par.getLangName ();
                 faultType = CUtils.getClassNameFromParamInfoConsideringArrays (par,wscontext);
                 if (j > 1)
-                {
                     c_writer.write ("\t\t\telse if");
-                    writeExceptions (faultType, faultInfoName, paramName, langName);
-                }
                 else
-                {
                     c_writer.write ("\t\t\tif");
-                    writeExceptions (faultType,faultInfoName, paramName, langName);
-                }
+                writeExceptions (faultType, faultInfoName, paramName, langName);
             }
         }
         
@@ -877,31 +872,53 @@ public class ClientStubWriter extends CP
     {
         try
         {
-            c_writer.write("(0 == strcmp(\"" + faultInfoName + "\", pcCmplxFaultName))\n");
-            c_writer.write("\t\t\t{\n");
-            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");
-            
             String faultTypeName;
             if (faulttype.lastIndexOf('*') != -1)
                 faultTypeName = faulttype.substring(0, faulttype.lastIndexOf('*'));
             else
                 faultTypeName = faulttype;
-    
-            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("(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)