You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by na...@apache.org on 2008/12/30 02:32:53 UTC

svn commit: r730027 - in /webservices/axis/trunk/c: src/common/Param.cpp src/engine/client/Call.cpp src/soap/SoapMethod.cpp src/soap/SoapSerializer.cpp tests/auto_build/testcases/output/DocLitNonwrapperTests_ClientRequest.expected

Author: nadiramra
Date: Mon Dec 29 17:32:53 2008
New Revision: 730027

URL: http://svn.apache.org/viewvc?rev=730027&view=rev
Log:
AXISCPP-458 - unwrapped support. Fixes.

Modified:
    webservices/axis/trunk/c/src/common/Param.cpp
    webservices/axis/trunk/c/src/engine/client/Call.cpp
    webservices/axis/trunk/c/src/soap/SoapMethod.cpp
    webservices/axis/trunk/c/src/soap/SoapSerializer.cpp
    webservices/axis/trunk/c/tests/auto_build/testcases/output/DocLitNonwrapperTests_ClientRequest.expected

Modified: webservices/axis/trunk/c/src/common/Param.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/common/Param.cpp?rev=730027&r1=730026&r2=730027&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/common/Param.cpp (original)
+++ webservices/axis/trunk/c/src/common/Param.cpp Mon Dec 29 17:32:53 2008
@@ -185,12 +185,8 @@
             }
             else
             {
-                // In order to support doc/lit unwrapped, m_sName (qualified element name) is passed as a null 
-                // string in the stub code.  So we do not want to serialize null string in this case. 
-                //
                 // NOTE: ">" is not serialized to enable the type's serializer to add attributes.
-                if (!m_sName.empty())
-                    pSZ.serialize ("<", m_sName.c_str (), NULL); 
+                pSZ.serialize ("<", m_sName.c_str (), NULL); 
 
                 logDebugArg2("Calling serializer function %p for complex object %p", m_Value.pCplxObj->pSZFunct, m_Value.pCplxObj->pObject)
 
@@ -198,8 +194,7 @@
 
                 logDebugArg2("Returned from serializer function %p, status=%d", m_Value.pCplxObj->pSZFunct, stat)
 
-                if (!m_sName.empty())
-                    pSZ.serialize ("</", m_sName.c_str (), ">\n", NULL);
+                pSZ.serialize ("</", m_sName.c_str (), ">\n", NULL);
             }
             break;
         case XSD_ANY:

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=730027&r1=730026&r2=730027&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/engine/client/Call.cpp (original)
+++ webservices/axis/trunk/c/src/engine/client/Call.cpp Mon Dec 29 17:32:53 2008
@@ -165,20 +165,9 @@
 {
     logEntryEngine("Call::setOperation")
 
-    m_pIWSSZ->createSoapMethod (pchOperation, pchNamespace);
+    m_pIWSSZ->createSoapMethod (pchOperation, pchNamespace, bIsWrapperStyle);
     m_pAxisEngine->getMessageData()->setOperationName(pchOperation);
     
-    SoapMethod* sm = getSOAPSerializer()->getSOAPMethod();
-    sm->setWrapperStyle(bIsWrapperStyle); 
-    
-    if (!bIsWrapperStyle)
-    {
-        // TODO why can we not do this for wrapper-style also? For wrapper, we add namespace
-        //      definition to wrapper element, but why not to envelope? Investigate.
-        m_pIWSSZ->addNamespaceToEnvelope((AxisChar * )pchNamespace, 
-                                         (AxisChar * )m_pIWSSZ->getNamespacePrefix(pchNamespace));
-    }
-    
     logExit()
 }
 

Modified: webservices/axis/trunk/c/src/soap/SoapMethod.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/soap/SoapMethod.cpp?rev=730027&r1=730026&r2=730027&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/soap/SoapMethod.cpp (original)
+++ webservices/axis/trunk/c/src/soap/SoapMethod.cpp Mon Dec 29 17:32:53 2008
@@ -157,30 +157,33 @@
             }
             else
             {
-            	// We are doing non-wrapper style.  The call to Call::setOperation resulted in 
-            	// initial namespace being added to the envelope.  So we do not have to define
-            	// initial namespace, although we need to define it to the serializer so that
-            	// subsequent namespaces are indexed correctly.
+            	// We are doing non-wrapper style.  
             	
             	if (!m_OutputParams.empty())
-            	{
+            	{	
             		// Serialize parameters....
-            		
-	                // push the current NS to the NS stack
-	                pSZ.getNamespacePrefix(m_strUri.c_str());
-	                
-	                iStatus= serializeOutputParam(pSZ);
 	                
-	                // remove the current NS from the NS stack
+	                // remove the current NS from the NS stack - we want the bean to define the namespace.
+            		// We could have added initial namespace to envelope, but for complex types
+            		// it seemed best to declare namespace as part of root element of xml document.
 	                pSZ.removeNamespacePrefix(m_strUri.c_str());
 	                
+	                iStatus= serializeOutputParam(pSZ);
+	                	                
 	                if(iStatus==AXIS_FAIL)
 	                    break;
             	}
             	else if (!m_strLocalname.empty())
             	{
+                    // push the current NS to the NS stack
+            		const char *nsToUse=pSZ.getNamespacePrefix(m_strUri.c_str());
+            		
             		// Serialize an empty element request.
-                    pSZ.serialize("<", m_strPrefix.c_str(), ":", m_strLocalname.c_str(), "/>", NULL);
+                    pSZ.serialize("<", nsToUse, ":", m_strLocalname.c_str(),
+                         " xmlns:", nsToUse, "=\"", m_strUri.c_str(), "\" />", NULL);    
+                    
+                    // remove the current NS from the NS stack
+                    pSZ.removeNamespacePrefix(m_strUri.c_str());
             	}
             }
         }

Modified: webservices/axis/trunk/c/src/soap/SoapSerializer.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/soap/SoapSerializer.cpp?rev=730027&r1=730026&r2=730027&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/soap/SoapSerializer.cpp (original)
+++ webservices/axis/trunk/c/src/soap/SoapSerializer.cpp Mon Dec 29 17:32:53 2008
@@ -59,6 +59,8 @@
     m_pNamespace = NULL;
     m_pContentIdSet = NULL;
     
+    reset();
+    
     logExit()
 }
 
@@ -284,20 +286,37 @@
 { 
     logEntryEngine("SoapSerializer::addOutputCmplxParam")
 
-    int    iSuccess = AXIS_SUCCESS;
-
-    Param * pParam = new Param();
-
-    pParam->m_Value.pCplxObj = new ComplexObjectHandler;
-    pParam->m_Value.pCplxObj->pObject = pObject;
-    pParam->m_Value.pCplxObj->pSZFunct = (AXIS_SERIALIZE_FUNCT) pSZFunct;
-    pParam->m_Value.pCplxObj->pDelFunct = (AXIS_OBJECT_DELETE_FUNCT) pDelFunct;
-    if( m_pSoapEnvelope &&
-        (m_pSoapEnvelope->m_pSoapBody) &&
-        (m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod)) 
-        m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->addOutputParam( pParam);
+    int    iSuccess = AXIS_FAIL;
 
-    pParam->setName( pName);
+    if ( m_pSoapEnvelope 
+    		&& (m_pSoapEnvelope->m_pSoapBody) 
+    		&& (m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod))
+    {
+	    Param * pParam = new Param();
+	
+	    pParam->m_Value.pCplxObj            = new ComplexObjectHandler;
+	    pParam->m_Value.pCplxObj->pObject   = pObject;
+	    pParam->m_Value.pCplxObj->pSZFunct  = (AXIS_SERIALIZE_FUNCT) pSZFunct;
+	    pParam->m_Value.pCplxObj->pDelFunct = (AXIS_OBJECT_DELETE_FUNCT) pDelFunct;
+
+	    // This check is to ensure backward compatibility...do not remove. It use to be we accepted
+	    // null string to indicate non-wrapper style, but this is no longer the case. So we need
+	    // to set it to a value.
+	    
+	    AxisString sName = pName;
+	    if (sName.empty())
+	    {
+	    	sName  = m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->getPrefix();
+	    	sName += ":";
+	    	sName += m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->getMethodName();
+	    }
+	    
+	    pParam->setName( sName.c_str() );
+	    
+	    m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->addOutputParam( pParam );
+	    
+	    iSuccess = AXIS_SUCCESS;
+    }
     
     logExitWithReturnCode(iSuccess)
     
@@ -627,27 +646,37 @@
 {
     logEntryEngine("SoapSerializer::createSoapMethod")
 
-    if (NULL == m_pSoapEnvelope || NULL == m_pSoapEnvelope->m_pSoapBody)
-        return AXIS_FAIL;
-        
-    SoapMethod * pMethod = m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod;
-    if (pMethod == NULL)
+    int iStatus = AXIS_FAIL;
+
+    if (m_pSoapEnvelope 
+    		&& m_pSoapEnvelope->m_pSoapBody)
     {
-        pMethod = new SoapMethod();
-        setSoapMethod( pMethod);
+	    SoapMethod * pMethod = m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod;
+	    if (pMethod == NULL)
+	    {
+	        pMethod = new SoapMethod();
+	        setSoapMethod( pMethod);
+	    }
+	    
+	    // Ensure everything is cleared out if using existing method object.
+	    pMethod->reset();
+	    
+	    pMethod->setWrapperStyle(bIsWrapperStyle);
+	    pMethod->setLocalName( sLocalName);
+	    pMethod->setPrefix( getNamespacePrefix(sURI) );
+	    pMethod->setURI( sURI);
+	    
+	    // Since we want the bean to define the namespace for non-wrapper style, we need to reset
+	    // the counter.  See SoapMethod::serialize() for further information.
+	    if (!bIsWrapperStyle)
+	        m_nCounter = 0;
+	    
+	    iStatus = AXIS_SUCCESS;
     }
-    
-    // Ensure everything is cleared out if using existing method object.
-    pMethod->reset();
-    
-    pMethod->setWrapperStyle(bIsWrapperStyle);
-    pMethod->setLocalName( sLocalName);
-    pMethod->setPrefix( getNamespacePrefix(sURI) );
-    pMethod->setURI( sURI);
 
-    logExitWithReturnCode(AXIS_SUCCESS)
+    logExitWithReturnCode(iStatus)
 
-    return AXIS_SUCCESS;
+    return iStatus;
 }
 
 int SoapSerializer::
@@ -937,31 +966,37 @@
  * Basic output parameter going to be serialized as an Element later
  */
 int SoapSerializer::
-addOutputParam( const AxisChar * pchName, void * pValue, XSDTYPE type)
+addOutputParam( const AxisChar * pchName,  // prefix and element name
+                void * pValue,             // value
+                XSDTYPE type)              // type
 {
     logEntryEngine("SoapSerializer::addOutputParam")
 
-    IAnySimpleType* xsdValue = AxisUtils::createSimpleTypeObject(pValue, type);
-    
-    Param * pParam = new Param();
-
     int iStatus = AXIS_FAIL;
     
-    if( pParam)
+    if ( m_pSoapEnvelope 
+    		&& (m_pSoapEnvelope->m_pSoapBody) 
+    		&& (m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod)) 
     {
+        IAnySimpleType* xsdValue = AxisUtils::createSimpleTypeObject(pValue, type);
+
+    	Param * pParam = new Param();
+    	
         pParam->m_Type = type;
         pParam->m_sName = pchName;
         pParam->setValue(type, xsdValue);
         
-        if( m_pSoapEnvelope &&
-            (m_pSoapEnvelope->m_pSoapBody) &&
-            (m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod)) 
+        m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->addOutputParam( pParam );
+        
+        // if non-wrapper then we need to add namespace to envelope since it will not get added
+        // any other way.  non-wrapper support was added later so that is why we are in this mess.
+        if (!(m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->isWrapperStyle()))
         {
-            m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->addOutputParam( pParam);
-            iStatus = AXIS_SUCCESS;
+            addNamespaceToEnvelope((AxisChar * )m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->getUri().c_str(), 
+                                   (AxisChar * )m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->getPrefix().c_str());
         }
-        else
-            delete pParam;
+            
+        iStatus = AXIS_SUCCESS;
     }
 
     logExitWithReturnCode(iStatus)
@@ -990,8 +1025,9 @@
 
     return ret;
 }
-int SoapSerializer::serializeAsElement( const AxisChar * pName,
-                                        IAnySimpleType * pSimpleType)
+int SoapSerializer::
+serializeAsElement( const AxisChar * pName,
+                    IAnySimpleType * pSimpleType)
 {
     return serializeAsElement( pName, NULL, pSimpleType);
 }
@@ -1032,10 +1068,11 @@
     return iStatus;
 } 
 
-int SoapSerializer::serializeAsAttribute( const AxisChar * pName,
-                                          const AxisChar * pNamespace,
-                                          void * pValue,
-                                          XSDTYPE type)
+int SoapSerializer::
+serializeAsAttribute( const AxisChar * pName,
+                      const AxisChar * pNamespace,
+                      void * pValue,
+                      XSDTYPE type)
 {
     IAnySimpleType* pSimpleType = AxisUtils::createSimpleTypeObject(pValue, type);
     
@@ -1558,7 +1595,7 @@
 {
     logEntryEngine("SoapSerializer::reset")
 
-    m_nCounter = 0; // reset namespace prifix counter 
+    m_nCounter = 0; // reset namespace prefix counter 
 
     if( m_pSoapEnvelope )
         m_pSoapEnvelope->reset();

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/output/DocLitNonwrapperTests_ClientRequest.expected
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/output/DocLitNonwrapperTests_ClientRequest.expected?rev=730027&r1=730026&r2=730027&view=diff
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/output/DocLitNonwrapperTests_ClientRequest.expected (original)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/output/DocLitNonwrapperTests_ClientRequest.expected Mon Dec 29 17:32:53 2008
@@ -1,71 +1,71 @@
-POST /axis/Operation HTTP/1.1
-Host: 127.0.0.1:13260
-Content-Type: text/xml; charset=UTF-8
-SOAPAction: ""
-Content-Length: 359
-
-<?xml version='1.0' encoding='utf-8' ?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://dom.w3c.org">
-<SOAP-ENV:Body>
-<ns1:inDocument>Input for operation 1</ns1:inDocument>
-</SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-
-POST /axis/Operation HTTP/1.1
-Host: 127.0.0.1:13260
-Content-Type: text/xml; charset=UTF-8
-SOAPAction: ""
-Content-Length: 376
-
-<?xml version='1.0' encoding='utf-8' ?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://dom.w3c.org">
-<SOAP-ENV:Body>
-<ns1:Operation2Request><number1>2000</number1>
-</ns1:Operation2Request>
-</SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-
-POST /axis/Operation HTTP/1.1
-Host: 127.0.0.1:13260
-Content-Type: text/xml; charset=UTF-8
-SOAPAction: ""
-Content-Length: 328
-
-<?xml version='1.0' encoding='utf-8' ?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://dom.w3c.org">
-<SOAP-ENV:Body>
-<ns1:Operation3Request/></SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-
-POST /axis/Operation HTTP/1.1
-Host: 127.0.0.1:13260
-Content-Type: text/xml; charset=UTF-8
-SOAPAction: ""
-Content-Length: 459
-
-<?xml version='1.0' encoding='utf-8' ?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://dom.w3c.org">
-<SOAP-ENV:Body>
-<ns1:Operation4Request><record><field1>field4444401</field1>
-<field2>field4444402</field2>
-<field3>field4444403</field3>
-</record></ns1:Operation4Request>
-</SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-
-POST /axis/Operation HTTP/1.1
-Host: 127.0.0.1:13260
-Content-Type: text/xml; charset=UTF-8
-SOAPAction: ""
-Content-Length: 459
-
-<?xml version='1.0' encoding='utf-8' ?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://dom.w3c.org">
-<SOAP-ENV:Body>
-<ns1:Operation5Request><record><field1>field5555501</field1>
-<field2>field5555502</field2>
-<field3>field5555503</field3>
-</record></ns1:Operation5Request>
-</SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-
+POST /axis/Operation HTTP/1.1
+Host: 127.0.0.1:13260
+Content-Type: text/xml; charset=UTF-8
+SOAPAction: ""
+Content-Length: 359
+
+<?xml version='1.0' encoding='utf-8' ?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://dom.w3c.org">
+<SOAP-ENV:Body>
+<ns1:inDocument>Input for operation 1</ns1:inDocument>
+</SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+POST /axis/Operation HTTP/1.1
+Host: 127.0.0.1:13260
+Content-Type: text/xml; charset=UTF-8
+SOAPAction: ""
+Content-Length: 376
+
+<?xml version='1.0' encoding='utf-8' ?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<SOAP-ENV:Body>
+<ns1:Operation2Request xmlns:ns1="http://dom.w3c.org"><number1>2000</number1>
+</ns1:Operation2Request>
+</SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+POST /axis/Operation HTTP/1.1
+Host: 127.0.0.1:13260
+Content-Type: text/xml; charset=UTF-8
+SOAPAction: ""
+Content-Length: 329
+
+<?xml version='1.0' encoding='utf-8' ?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<SOAP-ENV:Body>
+<ns1:Operation3Request xmlns:ns1="http://dom.w3c.org" /></SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+POST /axis/Operation HTTP/1.1
+Host: 127.0.0.1:13260
+Content-Type: text/xml; charset=UTF-8
+SOAPAction: ""
+Content-Length: 459
+
+<?xml version='1.0' encoding='utf-8' ?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<SOAP-ENV:Body>
+<ns1:Operation4Request xmlns:ns1="http://dom.w3c.org"><record><field1>field4444401</field1>
+<field2>field4444402</field2>
+<field3>field4444403</field3>
+</record></ns1:Operation4Request>
+</SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+POST /axis/Operation HTTP/1.1
+Host: 127.0.0.1:13260
+Content-Type: text/xml; charset=UTF-8
+SOAPAction: ""
+Content-Length: 459
+
+<?xml version='1.0' encoding='utf-8' ?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<SOAP-ENV:Body>
+<ns1:Operation5Request xmlns:ns1="http://dom.w3c.org"><record><field1>field5555501</field1>
+<field2>field5555502</field2>
+<field3>field5555503</field3>
+</record></ns1:Operation5Request>
+</SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+