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 2011/03/03 22:38:57 UTC

svn commit: r1076806 - in /axis/axis1/c/trunk/src: engine/client/ soap/ wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/

Author: nadiramra
Date: Thu Mar  3 21:38:56 2011
New Revision: 1076806

URL: http://svn.apache.org/viewvc?rev=1076806&view=rev
Log:
AXISCPP-843 Serialiser is using namespaces without first assigning them in the XML

Modified:
    axis/axis1/c/trunk/src/engine/client/Call.cpp
    axis/axis1/c/trunk/src/soap/Attribute.cpp
    axis/axis1/c/trunk/src/soap/SoapSerializer.cpp
    axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
    axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java
    axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java

Modified: axis/axis1/c/trunk/src/engine/client/Call.cpp
URL: http://svn.apache.org/viewvc/axis/axis1/c/trunk/src/engine/client/Call.cpp?rev=1076806&r1=1076805&r2=1076806&view=diff
==============================================================================
--- axis/axis1/c/trunk/src/engine/client/Call.cpp (original)
+++ axis/axis1/c/trunk/src/engine/client/Call.cpp Thu Mar  3 21:38:56 2011
@@ -1160,7 +1160,7 @@ void Call::setSOAPMethodAttribute( const
     else
         pAttribute = new Attribute( attributeList, pLocalname, pPrefix, pValue);
 
-    m_pIWSSZ->setSOAPMethodAttribute( ((Attribute *) pAttribute)->clone());
+    m_pIWSSZ->setSOAPMethodAttribute((Attribute *) pAttribute);
 }
 
 void Call::clearSOAPMethodAttributes()

Modified: axis/axis1/c/trunk/src/soap/Attribute.cpp
URL: http://svn.apache.org/viewvc/axis/axis1/c/trunk/src/soap/Attribute.cpp?rev=1076806&r1=1076805&r2=1076806&view=diff
==============================================================================
--- axis/axis1/c/trunk/src/soap/Attribute.cpp (original)
+++ axis/axis1/c/trunk/src/soap/Attribute.cpp Thu Mar  3 21:38:56 2011
@@ -280,37 +280,45 @@ serialize(SoapSerializer& pSZ,
 {    
     int intStatus= AXIS_FAIL;
 
-    if (isSerializable()
-            && (!pSZ.getNamespaceURL( m_prefix).empty() || NULL!=uri))
-    {        
+    if (isSerializable())
+    {
         pSZ.serialize(" ", NULL);
 
-        /*
-         *  If User has provided the prefix we just have to serialize. We will
-         *  not worry to declare the namespace at all. Because it is the users
-         *  responsibility to add namespace declaration separately.
-         *  However, if user hasn't provided the prefix. So we have to do the following.
-         *  - get the prefix from the Serializer
-         *  - if this is a new namespace, then also declare the namespace.
-         */
-        if(!m_prefix.empty() || NULL!=uri)
-            pSZ.serialize(m_prefix.c_str(), ":", NULL);
-        else if (!m_uri.empty())
+        if (m_prefix.compare("xmlns") == 0)
         {
-            bool blnIsNewNamespace = false;
-            m_prefix = pSZ.getNamespacePrefix(m_uri.c_str(), blnIsNewNamespace);
-            if (blnIsNewNamespace)
+            // Namespace declaration...
+            pSZ.serialize("xmlns:", m_localname.c_str(), "=", PLATFORM_DOUBLE_QUOTE_S, m_value.c_str(), PLATFORM_DOUBLE_QUOTE_S, NULL);
+            intStatus= AXIS_SUCCESS;
+        }
+        else if ((!pSZ.getNamespaceURL( m_prefix).empty() || NULL!=uri))
+        {
+            /*
+             *  If User has provided the prefix we just have to serialize. We will
+             *  not worry to declare the namespace at all. Because it is the users
+             *  responsibility to add namespace declaration separately.
+             *  However, if user hasn't provided the prefix. So we have to do the following.
+             *  - get the prefix from the Serializer
+             *  - if this is a new namespace, then also declare the namespace.
+             */
+            if(!m_prefix.empty() || NULL!=uri)
+                pSZ.serialize(m_prefix.c_str(), ":", NULL);
+            else if (!m_uri.empty())
             {
-                lstTmpNameSpaceStack.push_back((AxisChar*)m_uri.c_str());
-                pSZ.serialize("xmlns:", m_prefix.c_str(), "=", PLATFORM_DOUBLE_QUOTE_S, m_uri.c_str(), PLATFORM_DOUBLE_QUOTE_S, " ", NULL);
-            }
+                bool blnIsNewNamespace = false;
+                m_prefix = pSZ.getNamespacePrefix(m_uri.c_str(), blnIsNewNamespace);
+                if (blnIsNewNamespace)
+                {
+                    lstTmpNameSpaceStack.push_back((AxisChar*)m_uri.c_str());
+                    pSZ.serialize("xmlns:", m_prefix.c_str(), "=", PLATFORM_DOUBLE_QUOTE_S, m_uri.c_str(), PLATFORM_DOUBLE_QUOTE_S, " ", NULL);
+                }
 
-            pSZ.serialize(m_prefix.c_str(), ":", NULL);
-        }
+                pSZ.serialize(m_prefix.c_str(), ":", NULL);
+            }
 
-        pSZ.serialize(m_localname.c_str(), "=", PLATFORM_DOUBLE_QUOTE_S, m_value.c_str(), PLATFORM_DOUBLE_QUOTE_S, NULL);
+            pSZ.serialize(m_localname.c_str(), "=", PLATFORM_DOUBLE_QUOTE_S, m_value.c_str(), PLATFORM_DOUBLE_QUOTE_S, NULL);
 
-        intStatus= AXIS_SUCCESS;
+            intStatus= AXIS_SUCCESS;
+        }
     }
 
     return intStatus;    

Modified: axis/axis1/c/trunk/src/soap/SoapSerializer.cpp
URL: http://svn.apache.org/viewvc/axis/axis1/c/trunk/src/soap/SoapSerializer.cpp?rev=1076806&r1=1076805&r2=1076806&view=diff
==============================================================================
--- axis/axis1/c/trunk/src/soap/SoapSerializer.cpp (original)
+++ axis/axis1/c/trunk/src/soap/SoapSerializer.cpp Thu Mar  3 21:38:56 2011
@@ -1590,7 +1590,9 @@ reset()
 {
     logEntryEngine("SoapSerializer::reset")
 
-    m_nCounter = 0; // reset namespace prefix counter 
+    // reset namespace prefix counter and stack
+    m_nCounter = 0;
+    m_NsStack.clear();
 
     if( m_pSoapEnvelope )
         m_pSoapEnvelope->reset();

Modified: axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
URL: http://svn.apache.org/viewvc/axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java?rev=1076806&r1=1076805&r2=1076806&view=diff
==============================================================================
--- axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java (original)
+++ axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java Thu Mar  3 21:38:56 2011
@@ -278,7 +278,10 @@ public class ClientStubWriter
         // Generate global variables 
         //=============================================================================   
         
-        c_writer.write("\tAXISCHANDLE call = axiscStubGetCall(stub);\n");
+        c_writer.write ("\tAxiscBool blnIsNewPrefix;\n");
+        c_writer.write ("\tconst AxiscChar *pcNSPrefix;\n");
+        c_writer.write ("\tAXISCHANDLE pSZ;\n");
+        c_writer.write ("\tAXISCHANDLE call = axiscStubGetCall(stub);\n");
         
         if (returntype != null)
         {
@@ -417,6 +420,7 @@ public class ClientStubWriter
             {
                 commentIssued = true;
                 CUtils.printBlockComment(c_writer, "Process parameters.");
+                c_writer.write ("\tpSZ = axiscCallGetSOAPSerializer(call);\n\n");
             }
             else
                 c_writer.write ("\n");
@@ -467,9 +471,11 @@ public class ClientStubWriter
                 {
                     int stringLength = 8 + 1 + parameterName.length () + 1;
                     c_writer.write ("\t\tchar cPrefixAndParamName" + i + "[" + stringLength + "];\n");
-                    c_writer.write ("\t\tsprintf( cPrefixAndParamName" + i +
-                              ", \"%s:" + parameterName +
-                              "\", axiscCallGetNamespacePrefix(call,\"" +  namespace + "\"));\n");
+                    
+                    c_writer.write("\t\tpcNSPrefix = axiscSoapSerializerGetNamespacePrefix(pSZ, \"" + namespace + "\", &blnIsNewPrefix);\n");
+                    c_writer.write("\t\tif (blnIsNewPrefix)\n");
+                    c_writer.write("\t\t\taxiscCallSetSOAPMethodAttribute(call, pcNSPrefix, \"xmlns\", NULL, \"" + namespace + "\");\n");
+                    c_writer.write("\t\tsprintf( cPrefixAndParamName" + i + ", \"%s:" + parameterName + "\", pcNSPrefix);\n");
                 }
     
                 if (param.getType().isAttachment())

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=1076806&r1=1076805&r2=1076806&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 Thu Mar  3 21:38:56 2011
@@ -160,7 +160,8 @@ public class ClientStubWriter extends CP
                 c_writer.write("#include \"" + c_classname + CUtils.getHeaderFileExtension() + "\"\n\n");
 
             c_writer.write("#include <axis/AxisWrapperAPI.hpp>\n");
-            c_writer.write ("#include <axis/Axis.hpp>\n\n");
+            c_writer.write ("#include <axis/Axis.hpp>\n");
+            c_writer.write ("#include <axis/IWrapperSoapSerializer.hpp>\n\n");
         } 
         catch (IOException e)
         {

Modified: axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java
URL: http://svn.apache.org/viewvc/axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java?rev=1076806&r1=1076805&r2=1076806&view=diff
==============================================================================
--- axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java (original)
+++ axis/axis1/c/trunk/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java Thu Mar  3 21:38:56 2011
@@ -322,7 +322,10 @@ public class ClientStubWriter
             }
         }
         
-        c_writer.write ("\tconst char* pcCmplxFaultName = NULL;\n\n");
+        c_writer.write ("\tconst char* pcCmplxFaultName = NULL;\n");
+        c_writer.write ("\tbool blnIsNewPrefix;\n");
+        c_writer.write ("\tconst AxisChar *pcNSPrefix;\n");
+        c_writer.write ("\tIWrapperSoapSerializer * pSZ;\n\n");
         
         //=============================================================================
         // Generate try block and method logic
@@ -412,6 +415,8 @@ public class ClientStubWriter
             {
                 commentIssued = true;
                 CUtils.printBlockComment(c_writer, "Process parameters.");
+                
+                c_writer.write ("\t\tpSZ = (IWrapperSoapSerializer *)m_pCall->getSOAPSerializer();\n\n");
             }
             else
                 c_writer.write ("\n");
@@ -462,11 +467,12 @@ public class ClientStubWriter
                 }
                 else
                 {
-                    int stringLength = 8 + 1 + parameterName.length () + 1;
-                    c_writer.write (tab2 + "\t\tchar cPrefixAndParamName" + i + "[" + stringLength + "];\n");
-                    c_writer.write (tab2 + "\t\tsprintf( cPrefixAndParamName" + i +
-                              ", \"%s:" + parameterName +
-                              "\", m_pCall->getNamespacePrefix(\"" +  namespace + "\"));\n");
+                    int stringLength = 8 + 1 + parameterName.length () + 1;    
+                    c_writer.write(tab2 + "\t\tchar cPrefixAndParamName" + i + "[" + stringLength + "];\n");
+                    c_writer.write(tab2 + "\t\tpcNSPrefix = pSZ->getNamespacePrefix(\"" + namespace + "\", blnIsNewPrefix);\n");
+                    c_writer.write(tab2 + "\t\tif (blnIsNewPrefix)\n");
+                    c_writer.write(tab2 + "\t\t\tm_pCall->setSOAPMethodAttribute(pcNSPrefix, \"xmlns\",\"" + namespace + "\");\n");
+                    c_writer.write(tab2 + "\t\tsprintf( cPrefixAndParamName" + i + ", \"%s:" + parameterName + "\", pcNSPrefix);\n");
                 }
     
                 if (param.getType().isAttachment())