You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by na...@apache.org on 2006/05/30 00:15:52 UTC

svn commit: r410156 - in /webservices/axis/trunk/c: include/axis/client/ src/cbindings/client/ src/engine/client/ src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/

Author: nadiramra
Date: Mon May 29 15:15:51 2006
New Revision: 410156

URL: http://svn.apache.org/viewvc?rev=410156&view=rev
Log:
C support fixes/enhancements. Second attempt to handle soap faults.
First attempt created exception handler functions in the stub file
for each web method. The code in the exception handler function is similar
to what is in the catch() part of a stub in C++.  One the fault is obtained,
the stub exception handler is invoked. 

This second (and preferred) attempt eliminates the exception handler functions 
and has the C-binding code handle the soap fault and then invoke the stub exception 
handler.  Much cleaner code is produced.

Modified:
    webservices/axis/trunk/c/include/axis/client/Call.hpp
    webservices/axis/trunk/c/src/cbindings/client/CallC.cpp
    webservices/axis/trunk/c/src/cbindings/client/StubC.cpp
    webservices/axis/trunk/c/src/engine/client/Call.cpp
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java

Modified: webservices/axis/trunk/c/include/axis/client/Call.hpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/include/axis/client/Call.hpp?rev=410156&r1=410155&r2=410156&view=diff
==============================================================================
--- webservices/axis/trunk/c/include/axis/client/Call.hpp (original)
+++ webservices/axis/trunk/c/include/axis/client/Call.hpp Mon May 29 15:15:51 2006
@@ -47,6 +47,7 @@
 class SoapSerializer;
 class ISoapAttachment;
 class ContentIdSet;
+class AxisException;
 
 /**
  * @class Call
@@ -1684,34 +1685,67 @@
     /** 
      * Set C-binding stub pointer associated with Call object. 
      * This function was added in support of the c-Binding implementation.  
+     *
+     * @param pStub - pointer to C binding stub object.
      */
      void setCStub(void *pStub) { m_pStub = pStub; }
      
     /** 
      * Get C-binding stub pointer. 
      * This function was added in support of the c-Binding implementation.  
+     *
+     * @return Pointer to C binding stub object.
      */     
      void *getCStub() { return m_pStub; }
      
     /** 
      * Set pointer to exception handler function for call object. 
+     * The pSoapFaultNamespace is used as-is - i.e. it should not be deleted
+     * by the caller unless a subsequent call to this function is being made.
+     * Calling this function will result in the resetting of the SOAP Fault list.
+     * If service does not have any SOAP faults defined, call this function with
+     * NULL pointer in order to clear the SOAP fault list.
      * This function was added in support of the c-Binding implementation.  
+     *
+     * @param pSoapFaultNamespace - pointer to namespace to use when checking for fault.
      */
-     void setCExceptionHandler(void *pExceptionHandler) 
-     { 
-        m_pExceptionHandler = pExceptionHandler; 
+     void setSoapFaultNamespace(const char *pSoapFaultNamespace) 
+     {      
+        m_pSoapFaultNamespace = pSoapFaultNamespace; 
+        resetSoapFaultList();
      }
-     
+
     /** 
-     * Get pointer to exception handling function for call object. 
-     * This function was added in support of the c-Binding implementation.
-     */     
-     void *getCExceptionHandler() { return m_pExceptionHandler; }
+     * Set pointer to exception handler function for call object. 
+     * Calling this function will result in the resetting of the SOAP Fault list.
+     * This function was added in support of the c-Binding implementation.  
+     *
+     * @param faultName - pointer to fault name.
+     * @param createFp - pointer to object creation function for fault detail
+     * @param deleteFp - pointer to object deletion function for fault detail
+     * @param deserializerFp - pointer to object deserializer function for fault detail
+     */
+     void addSoapFaultToList(const char *faultName, 
+                             void *createFp, void *deleteFp, void *deserializerFp);
+     
+     /** 
+      * Process soap fault. The SOAP fault list will be searched to see if there
+      * is a SOAP Fault in the list that matches.  After the SOAP fault has been processed,
+      * the stub exception handler will be called if one exists; otherwise, the generic 
+      * exception handler will be called.
+      * This function was added in support of the c-Binding implementation.  
+      *
+      * @param exceptionCode - exception code in an AXIS exception that was thrown.
+      * @param createFp - pointer to exception string in AXIS exception that was thrown.
+      * @param exceptionHandlerFp - pointer to exception handler function
+      */
+     void processSoapFault(AxisException *e, void *exceptionHandlerFp);
 
 private:
     void closeConnection();
     int makeArray();
-    void cleanup(); // clean memeory in case of exceptions and destructor etc.
+    void cleanup(); // clean memory in case of exceptions and destructor etc.
+    void resetSoapFaultList(); // added in support of C-binding implementation.
 
     ClientAxisEngine* m_pAxisEngine;
 
@@ -1720,6 +1754,7 @@
 #endif
     list<void*> m_handlerProperties;
     list<ISoapAttachment*> m_attachments;
+    list<void *> m_soapFaults; // c binding support use only
 
 #ifdef WIN32
   #pragma warning (default : 4251)
@@ -1765,14 +1800,14 @@
     ContentIdSet *m_pContentIdSet;
     
     /**
-     * following is for C-binding support.
+     * Following is for C-binding support. The stub that the Call object belongs to.
      */
     void * m_pStub;
     
     /**
-     * Following is for C-binding support. Pointer to exception handler function.
+     * Following is for C-binding support. Namespace associated with soap fault.
      */
-    void * m_pExceptionHandler;    
+    const char * m_pSoapFaultNamespace;       
 };
 AXIS_CPP_NAMESPACE_END
 

Modified: webservices/axis/trunk/c/src/cbindings/client/CallC.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/cbindings/client/CallC.cpp?rev=410156&r1=410155&r2=410156&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/client/CallC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/client/CallC.cpp Mon May 29 15:15:51 2006
@@ -17,6 +17,7 @@
 
 #include <axis/client/Call.hpp>
 #include <axis/AxisException.hpp>
+#include <axis/client/Stub.hpp>
 
 #include "../AxisObjectConverter.hpp"
 
@@ -32,17 +33,16 @@
 
 extern "C" {
 
-typedef void (* AXIS_METHOD_EXCEPTION_HANDLER_FUNCT)(AXISCHANDLE c, int exceptionCode, const char *exceptionString);
-
-
 static void processException(Call *c, AxisException& e)
 {
-    AXIS_METHOD_EXCEPTION_HANDLER_FUNCT mfp = (AXIS_METHOD_EXCEPTION_HANDLER_FUNCT)c->getCExceptionHandler();
+    void *exceptionHandler = axiscAxisInvokeExceptionHandler;
+    void *stubExceptionHandler;
+    
+    Stub *s = (Stub *)c->getCStub();
+    if ((stubExceptionHandler = s->getCExceptionHandler()) != NULL)
+        exceptionHandler = stubExceptionHandler;
     
-    if (mfp)
-       mfp(c, e.getExceptionCode(), e.what());
-    else
-       axiscAxisInvokeExceptionHandler(e.getExceptionCode(), e.what(), NULL, NULL);
+    c->processSoapFault(&e, exceptionHandler);
 }
 
 
@@ -3427,20 +3427,27 @@
         Call *c = (Call*)call;
         return c->getCStub();
 }
-     
-AXISC_STORAGE_CLASS_INFO 
-void axiscCallSetCExceptionHandlerFunction(AXISCHANDLE call, void *pExceptionHandlerFunction) 
-{ 
-        Call *c = (Call*)call;
-        c->setCExceptionHandler(pExceptionHandlerFunction);
+
+AXISC_STORAGE_CLASS_INFO
+void axiscCallSetSoapFaultNamespace(AXISCHANDLE call, const char * pSoapFaultNamespace)
+{
+    Call *c = (Call*)call;
+    c->setSoapFaultNamespace(pSoapFaultNamespace);
 }
-     
-AXISC_STORAGE_CLASS_INFO    
-void *axiscCallGetCExceptionHandlerFunction(AXISCHANDLE call) 
-{ 
-        Call *c = (Call*)call;
-        return c->getCExceptionHandler();        
+
+
+AXISC_STORAGE_CLASS_INFO
+void axiscCallAddSoapFaultToList(AXISCHANDLE call, 
+                                 const char * faultName, 
+                                 void * createFp,
+                                 void * deleteFp,
+                                 void * deserializerFp)
+{
+    Call *c = (Call*)call;
+    c->addSoapFaultToList(faultName, createFp, deleteFp, deserializerFp);
 }
+
+
 
 
 

Modified: webservices/axis/trunk/c/src/cbindings/client/StubC.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/cbindings/client/StubC.cpp?rev=410156&r1=410155&r2=410156&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/client/StubC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/client/StubC.cpp Mon May 29 15:15:51 2006
@@ -791,6 +791,22 @@
     }
 }
 
+AXISC_STORAGE_CLASS_INFO
+void axiscStubSetCExceptionHandler(AXISCHANDLE stub, void * pExceptionHandler)
+{
+    StubC *s = (StubC*)stub;  
+    s->setCExceptionHandler(pExceptionHandler); 
+}
+
+AXISC_STORAGE_CLASS_INFO
+void * axiscStubGetCExceptionHandler(AXISCHANDLE stub)
+{
+    StubC *s = (StubC*)stub;
+    return s->getCExceptionHandler();
+}
+
+
+
 }
 
 

Modified: webservices/axis/trunk/c/src/engine/client/Call.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/engine/client/Call.cpp?rev=410156&r1=410155&r2=410156&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/engine/client/Call.cpp (original)
+++ webservices/axis/trunk/c/src/engine/client/Call.cpp Mon May 29 15:15:51 2006
@@ -23,6 +23,8 @@
 
 #include <axis/client/Call.hpp>
 #include <axis/AxisException.hpp>
+#include <axis/ISoapFault.hpp>
+#include <axis/AxisWrapperAPI.hpp>
 #include "../../common/AxisConfig.h"
 #include "ClientAxisEngine.h"
 #include "../SOAPTransportFactory.h"
@@ -33,6 +35,7 @@
 #include "../../common/AxisGenException.h"
 #include "../../soap/Attribute.h"
 
+
 extern AXIS_CPP_NAMESPACE_PREFIX AxisConfig* g_pConfig;
 
 extern "C" int initialize_module (int bServer);
@@ -42,7 +45,7 @@
 
 Call::Call ()
 :m_pcEndPointUri(NULL), m_strProxyHost(""), m_uiProxyPort(0), m_bUseProxy(false),
-m_bCallInitialized(false), m_pContentIdSet(NULL), m_pStub(NULL), m_pExceptionHandler(NULL)
+m_bCallInitialized(false), m_pContentIdSet(NULL), m_pStub(NULL)
 {
     m_pAxisEngine = NULL;
     m_pIWSSZ = NULL;
@@ -104,6 +107,9 @@
     }
     
     m_attachments.clear();
+    
+    // Following is for C-binding support.
+    resetSoapFaultList();
 }
 
 void Call::cleanup()
@@ -1110,3 +1116,114 @@
     std::list<Attribute*> attributeList;
     return new Attribute(attributeList, pLocalname, pPrefix, pValue);
 }
+
+/** 
+ * ===================================================================================
+ * Following methods and structures are used in support of C-binding implementation
+ * ===================================================================================
+ */
+
+// following function typedef is also defined in Axis.h, but did not want to include in this file.
+typedef void (* AXIS_EXCEPTION_HANDLER_FUNCT)(int exceptionCode, const char *exceptionString, void * pSoapFault, void *faultDetail);
+
+typedef struct FaultInformation
+{
+    const char *             m_faultName;
+    AXIS_OBJECT_CREATE_FUNCT m_createFp;
+    AXIS_DESERIALIZE_FUNCT   m_deserializerFp;
+    AXIS_OBJECT_DELETE_FUNCT m_deleteFp;
+} FaultInformation_t;
+
+void Call::addSoapFaultToList(const char *faultName, 
+                              void *createFp, 
+                              void *deleteFp, 
+                              void *deserializerFp)
+{
+    FaultInformation_t *fi = new FaultInformation_t;
+    
+    fi->m_faultName      = faultName;
+    fi->m_createFp       = (AXIS_OBJECT_CREATE_FUNCT)createFp;
+    fi->m_deserializerFp = (AXIS_DESERIALIZE_FUNCT)deserializerFp;
+    fi->m_deleteFp       = (AXIS_OBJECT_DELETE_FUNCT)deleteFp;
+    
+    m_soapFaults.push_back(fi);
+}
+
+void Call::processSoapFault(AxisException *e, 
+                            void *exceptionHandlerFp)
+{
+    AXIS_EXCEPTION_HANDLER_FUNCT excFp = (AXIS_EXCEPTION_HANDLER_FUNCT)exceptionHandlerFp;
+    ISoapFault* pSoapFault             = NULL;
+    
+    if (AXISC_NODE_VALUE_MISMATCH_EXCEPTION == e->getExceptionCode() 
+            && m_pSoapFaultNamespace != NULL)
+        pSoapFault = (ISoapFault*) this->checkFault("Fault", m_pSoapFaultNamespace);
+
+    if(pSoapFault)
+    {
+	    void *pFaultDetail = NULL;
+	    bool faultIsDefined = false;
+	    bool isFaultDetailXMLString = false;
+        FaultInformation_t *fi;
+        const char* pcCmplxFaultName = pSoapFault->getCmplxFaultObjectName();
+
+        // See if fault is defined        
+        list<void *>::iterator it = m_soapFaults.begin();
+        while (it != m_soapFaults.end())
+        {
+            fi = (FaultInformation_t *)*it;
+            if (strcmp(fi->m_faultName, pcCmplxFaultName) == 0)
+            {
+                faultIsDefined = true;
+                break;
+            }
+            it++;
+        }
+        
+        if (faultIsDefined)
+        {
+            pFaultDetail = pSoapFault->getCmplxFaultObject(fi->m_deserializerFp, 
+                                                           fi->m_createFp,
+                                                           fi->m_deleteFp, 
+                                                           fi->m_faultName, 
+                                                           0);
+        }
+        else
+        {
+            pFaultDetail = (void *)pSoapFault->getSimpleFaultDetail();
+            
+            if (NULL==pFaultDetail || 0==strlen((char *)pFaultDetail))
+            {
+                pFaultDetail = this->getFaultAsXMLString();
+
+                if (NULL==pFaultDetail)
+                    pFaultDetail = "";
+                else
+                    isFaultDetailXMLString=true;
+            }
+        }
+        
+        excFp(e->getExceptionCode(), e->what(), pSoapFault, pFaultDetail);
+        
+        if (faultIsDefined)
+            fi->m_deleteFp(pFaultDetail, 0);
+        else if (isFaultDetailXMLString)
+            delete [] (char *)pFaultDetail;
+    }
+    else
+        excFp(e->getExceptionCode(), e->what(), NULL, NULL);
+}
+
+void Call::resetSoapFaultList()
+{
+    FaultInformation_t *fi;
+    
+    list<void *>::iterator it = m_soapFaults.begin();
+    while (it != m_soapFaults.end())
+    {
+        fi = (FaultInformation_t *)*it;
+        delete fi;
+        it++;
+    }
+    m_soapFaults.clear();
+}
\ No newline at end of file

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java?rev=410156&r1=410155&r2=410156&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java Mon May 29 15:15:51 2006
@@ -143,8 +143,6 @@
             writer.write("#include <axis/client/Call.h>\n");
             writer.write("#include <axis/IWrapperSoapSerializer.h>\n");
             writer.write("#include <axis/IWrapperSoapDeSerializer.h>\n");
-            writer.write("#include <axis/AxisException.h>\n");            
-            writer.write("#include <axis/ISoapFault.h>\n");
             
             writer.write("\n");
         }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java?rev=410156&r1=410155&r2=410156&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java Mon May 29 15:15:51 2006
@@ -85,17 +85,14 @@
           writer.write("\treturn axiscCallGetStatus(call);\n");
           writer.write("}\n\n");
 
-          writer.write("static AXIS_EXCEPTION_HANDLER_FUNCT " + classname + "_StubExceptionHandler = NULL;\n\n");
           writer.write("void set_" + classname 
                   + "_ExceptionHandler(AXISCHANDLE stub, AXIS_EXCEPTION_HANDLER_FUNCT fp)\n{\n");          
-          writer.write("\t" + classname + "_StubExceptionHandler = fp;\n");          
+          writer.write("\taxiscStubSetCExceptionHandler(stub, (void *)fp);\n");          
           writer.write("}\n");
           
           writer.write("\n");
           writer.write("/* ================================================== */\n" +
                        "/* Functions corresponding to the web service methods */\n" +
-                       "/* (also includes exception handlers for each         */\n" +
-                       "/* web service method)                                */\n" +
                        "/* ================================================== */\n");
           writer.write("\n");
           
@@ -103,7 +100,6 @@
           for (int i = 0; i < methods.size(); i++)
           {
                 minfo = (MethodInfo) methods.get(i);
-                this.writeMethodExceptionHandler(minfo);
                 this.writeMethodInWrapper(minfo);
                 writer.write("\n");
           }
@@ -386,13 +382,12 @@
             // TODO initialize return parameter appropriately.
         }
         
-        writer.write ("\tconst char* pcCmplxFaultName = NULL;\n");
         writer.write("\n");
-        
-        writer.write ("\taxiscCallSetCExceptionHandlerFunction(call, (void *)" + methodName 
-            + "_ExceptionHandler);\n");
+
+        writeFaultHandlingCode(minfo);
         writer.write("\n");        
         
+        
         writer.write("\tif (AXISC_SUCCESS != axiscCallInitialize(call, C_DOC_PROVIDER " + ")) return ");
         if (returntype != null)
             writer.write((returntypeisarray ? "RetArray" : returntypeissimple ? "Ret" : "pReturn") + ";\n");
@@ -928,52 +923,18 @@
         writer.write("}\n");
     }
 
-private void writeMethodExceptionHandler(MethodInfo minfo) throws WrapperFault, IOException
-{
-    String methodName = minfo.getMethodname();
-    String stubExceptionHandler = classname + "_StubExceptionHandler";
-
-    writer.write("\n/*\n");
-    writer.write(" * This function is the exception handler for the service method " + methodName + "\n");
-    writer.write(" */\n");
-    
-    writer.write ("static void " + methodName 
-            + "_ExceptionHandler(AXISCHANDLE call, int exceptionCode, const char *exceptionString)\n");
-    writer.write ("{\n");
-    
-    // ===================================================================
-    // start of function body
-    // ===================================================================
-    
-    writer.write ("\tconst char* pcCmplxFaultName = NULL;\n");  
-    writer.write ("\tAXISCHANDLE pSoapFault = NULL;\n");    
-    
-    writer.write ("\n");   
-    writer.write ("\tif (AXISC_NODE_VALUE_MISMATCH_EXCEPTION == exceptionCode)\n");   
-    writer.write ("\t\tpSoapFault = axiscCallCheckFault(call, \"Fault\",\""
-              + wscontext.getWrapInfo ().getTargetEndpointURI () + "\" );\n\n");
+private void writeFaultHandlingCode(MethodInfo minfo) throws WrapperFault, IOException
+{  
+    writer.write ("\taxiscCallSetSoapFaultNamespace(call, \"" 
+            + wscontext.getWrapInfo ().getTargetEndpointURI () + "\");\n");
     
-    writer.write ("\tif(pSoapFault)\n");
-    writer.write ("\t{\n");
-
     //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 ())
-    {
-        flag = true;
-        writer.write ("\t\tpcCmplxFaultName = axiscSoapFaultGetCmplxFaultObjectName(pSoapFault);\n");
-    }
     
     while (paramsFault.hasNext ())
     {
-        j = j + 1;
         FaultInfo info = (FaultInfo) paramsFault.next ();
         faultInfoName = info.getFaultInfo ();
 
@@ -994,90 +955,20 @@
                     found = true;
                 }
         }
-        // FJP - D0004 <                            
 
         ArrayList paramInfo = info.getParams ();
         for (int i = 0; i < paramInfo.size (); i++)
         {
             ParameterInfo par = (ParameterInfo) paramInfo.get (i);
-            paramName = par.getParamName ();
             langName = par.getLangName ();
-            faultType = WrapperUtils.getClassNameFromParamInfoConsideringArrays (par,wscontext);
-            if (j > 1)
-                writer.write ("\t\telse if");
-            else
-                writer.write ("\t\tif");
 
-            writer.write ("(0 == strcmp(\"" + faultInfoName + "\", pcCmplxFaultName))\n");
-            writer.write ("\t\t{\n");
-            writer.write ("\t\t\t" + faultType + " pFaultDetail = \n");
-            writer.write ("\t\t\t\t(" + faultType + ")axiscSoapFaultGetCmplxFaultObject(pSoapFault,\n");
-            writer.write ("\t\t\t\t\t(void*) Axis_DeSerialize_" + langName + ",\n");
-            writer.write ("\t\t\t\t\t(void*) Axis_Create_" + langName + ",\n");
-            writer.write ("\t\t\t\t\t(void*) Axis_Delete_" + langName + ",\n");
-            writer.write ("\t\t\t\t\t\"" + faultInfoName + "\",\n");
-            writer.write ("\t\t\t\t\t0);\n\n");
-
-            writer.write ("\t\t\tif (" + stubExceptionHandler + ")\n");
-            writer.write ("\t\t\t\t" + stubExceptionHandler + "(exceptionCode, exceptionString, pSoapFault, pFaultDetail);\n");
-            writer.write ("\t\t\telse\n");
-            writer.write ("\t\t\t\taxiscAxisInvokeExceptionHandler(exceptionCode, exceptionString, pSoapFault, pFaultDetail);\n\n");        
-            
-            writer.write ("\t\t\tAxis_Delete_" + langName + "(pFaultDetail, 0);\n");
-            
-            writer.write ("\t\t}\n");
+            writer.write ("\taxiscCallAddSoapFaultToList(call, \"" 
+                    + faultInfoName + "\", "
+                    + "(void*) Axis_Create_" + langName + ", "
+                    + "(void*) Axis_Delete_" + langName + ", "                    
+                    + "(void*) Axis_DeSerialize_" + langName + ");\n");
         }
     }
-    
-    if (flag == true)
-    {
-        writer.write ("\t\telse\n");
-        writer.write ("\t\t{\n");
-    }
-
-    writer.write ("\t\t\tconst char *detail = axiscSoapFaultGetSimpleFaultDetail(pSoapFault);\n");
-    writer.write ("\t\t\tint deleteDetail=0;\n\n");
-    writer.write ("\t\t\tif (NULL==detail || 0==strlen(detail))\n");
-    writer.write ("\t\t\t{\n");
-    writer.write ("\t\t\t\tdetail=axiscCallGetFaultAsXMLString(call);\n\n");
-    writer.write ("\t\t\t\tif (NULL==detail)\n");
-    writer.write ("\t\t\t\t\tdetail=\"\";\n");
-    writer.write ("\t\t\t\telse\n");
-    writer.write ("\t\t\t\t\tdeleteDetail=1;\n");
-    writer.write ("\t\t\t}\n\n");
-
-    writer.write ("\t\t\tif (" + stubExceptionHandler + ")\n");
-    writer.write ("\t\t\t\t" + stubExceptionHandler + "(exceptionCode, exceptionString, pSoapFault, (void *)detail);\n");
-    writer.write ("\t\t\telse\n");
-    writer.write ("\t\t\t\taxiscAxisInvokeExceptionHandler(exceptionCode, exceptionString, pSoapFault, (void *)detail);\n\n");               
-    
-    writer.write ("\t\t\tif (deleteDetail && NULL!=detail)\n");
-    writer.write ("\t\t\t\taxiscAxisDelete( (void *)detail, XSDC_STRING);\n");
-
-    if (flag == true)
-        writer.write ("\t\t}\n");
-    
-    writer.write ("\t}\n");
-    writer.write ("\telse\n");
-    writer.write ("\t{\n");
-
-    writer.write ("\t\tif (" + stubExceptionHandler + ")\n");
-    writer.write ("\t\t\t" + stubExceptionHandler + "(exceptionCode, exceptionString, NULL, NULL);\n");
-    writer.write ("\t\telse\n");
-    writer.write ("\t\t\taxiscAxisInvokeExceptionHandler(exceptionCode, exceptionString, NULL, NULL);\n\n");               
-
-    writer.write ("\t}\n");
-
-    writer.write ("\n");
-    writer.write ("\tif (pSoapFault != NULL);\n");    
-    writer.write ("\t\taxiscSoapFaultDestroy(pSoapFault);\n");  
-    
-    // ===================================================================
-    // end of function body
-    // ===================================================================
-    
-    
-    writer.write ("}\n");
 }
 
     /* (non-Javadoc)



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