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 wh...@apache.org on 2005/03/01 13:16:17 UTC

cvs commit: ws-axis/c/tests/auto_build/testcases/client/cpp IHeaderBlockTest3Client.cpp

whitlock    2005/03/01 04:16:17

  Modified:    c/include/axis IHeaderBlock.hpp
               c/src/soap Attribute.cpp Attribute.h HeaderBlock.cpp
               c/tests/auto_build/testcases/client/cpp
                        IHeaderBlockTest3Client.cpp
  Log:
  AXISCPP-494 Fix IHeaderBlockTest3.
  Make localname mandatory on IHeaderBlock::createAttribute and all other parameters optional
  Fix memory leak in HeaderBlock::createAttribute
  Allow a prefix to match a namespace within a header block
  
  Revision  Changes    Path
  1.14      +7 -8      ws-axis/c/include/axis/IHeaderBlock.hpp
  
  Index: IHeaderBlock.hpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/include/axis/IHeaderBlock.hpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- IHeaderBlock.hpp	24 Feb 2005 10:53:29 -0000	1.13
  +++ IHeaderBlock.hpp	1 Mar 2005 12:16:16 -0000	1.14
  @@ -174,11 +174,10 @@
         * We expect that the server side will fail.
         * e.g. If creating more than one attribute with the same name the outcome is undefined
         * 
  -      *
  -      * @param localname The local name of the attribute.
  -      * @param prefix The prefix of the attribute.
  -      * @param uri The namespace uri of the attribute.
  -      * @param value The value of the attribute.
  +      * @param localname The local name of the attribute. (mandatory)
  +      * @param prefix The prefix of the attribute. (optional)
  +      * @param uri The namespace uri of the attribute. (optional)
  +      * @param value The value of the attribute. (optional)
         *
         * @return A pointer to the created Attribute will be returned.
         */
  @@ -192,9 +191,9 @@
         * We expect that the server side will fail.
         * e.g. If creating more than one attribute with the same name the outcome is undefined
         *
  -      * @param localname The local name of the attribute.
  -      * @param prefix The prefix of the attribute.
  -      * @param value The value of the attribute.
  +      * @param localname The local name of the attribute. (mandatory)
  +      * @param prefix The prefix of the attribute. (optional)
  +      * @param value The value of the attribute. (optional)
         *
         * @return A pointer to the created Attribute will be returned.
         */
  
  
  
  1.35      +4 -3      ws-axis/c/src/soap/Attribute.cpp
  
  Index: Attribute.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/Attribute.cpp,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- Attribute.cpp	23 Feb 2005 15:31:20 -0000	1.34
  +++ Attribute.cpp	1 Mar 2005 12:16:16 -0000	1.35
  @@ -175,11 +175,12 @@
   }
   
   int Attribute::serialize(SoapSerializer& pSZ, 
  -                         list<AxisChar*>& lstTmpNameSpaceStack)
  +                         list<AxisChar*>& lstTmpNameSpaceStack,
  +						 const AxisChar *uri)
   {    
       int intStatus= AXIS_FAIL;
   
  -    if (isSerializable() && !pSZ.getNamespaceURL( m_prefix).empty())
  +    if (isSerializable() && (!pSZ.getNamespaceURL( m_prefix).empty() || NULL!=uri))
       {        
           pSZ.serialize(" ", NULL);
   
  @@ -188,7 +189,7 @@
   		 *  not worry to declare the namespace at all. Because it is the users
   		 *  responsibiltiy to add his/her namespace declaration seperately.
            */
  -        if(!m_prefix.empty())
  +        if(!m_prefix.empty() || NULL!=uri)
           {            
               pSZ.serialize(m_prefix.c_str(), ":", NULL);
           }
  
  
  
  1.13      +1 -1      ws-axis/c/src/soap/Attribute.h
  
  Index: Attribute.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/Attribute.h,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Attribute.h	11 Feb 2005 18:45:33 -0000	1.12
  +++ Attribute.h	1 Mar 2005 12:16:16 -0000	1.13
  @@ -50,7 +50,7 @@
       int initializeForTesting();
   #endif
       int serialize(SoapSerializer& pSZ) const;
  -    int serialize(SoapSerializer& pSZ, list<AxisChar*>& lstTmpNameSpaceStack);
  +    int serialize(SoapSerializer& pSZ, list<AxisChar*>& lstTmpNameSpaceStack, const AxisChar *uri=NULL);
   
       Attribute();    
       Attribute(const AxisChar* localname, const AxisChar* prefix, 
  
  
  
  1.57      +54 -30    ws-axis/c/src/soap/HeaderBlock.cpp
  
  Index: HeaderBlock.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/HeaderBlock.cpp,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -u -r1.56 -r1.57
  --- HeaderBlock.cpp	25 Feb 2005 10:25:11 -0000	1.56
  +++ HeaderBlock.cpp	1 Mar 2005 12:16:16 -0000	1.57
  @@ -312,8 +312,26 @@
       list<Attribute*>::iterator itCurrAttribute= m_attributes.begin();
   
       while(itCurrAttribute != m_attributes.end())
  -    {        
  -        iStatus= (*itCurrAttribute)->serialize(pSZ, lstTmpNameSpaceStack);
  +    {    
  +		// See if this prefix matches a namespace within this headerblock
  +		const AxisChar *uri = NULL;
  +		Attribute *attr = *itCurrAttribute;
  +		const AxisChar *attrPrefix = attr->getPrefix();
  +		if (NULL != attrPrefix)
  +		{
  +			list<Namespace*>::iterator itNs = m_namespaceDecls.begin();
  +			while (itNs != m_namespaceDecls.end())
  +			{
  +				if (0 == strcmp((*itNs)->getPrefix(), attrPrefix))
  +				{
  +					uri = (*itNs)->getURI();
  +					break;
  +				}
  +				itNs++;
  +			}
  +		}
  +
  +        iStatus= (*itCurrAttribute)->serialize(pSZ, lstTmpNameSpaceStack, uri);
           if(iStatus==AXIS_FAIL)
           {
               break;
  @@ -547,6 +565,9 @@
   	return createImmediateChild(eNODE_TYPE, "", "", "", "");
   }
   
  +/**
  + * The localname must be specified, but all other input parameters are optional.
  + */
   IAttribute* HeaderBlock::createAttribute(const AxisChar *localname,
                                           const AxisChar *prefix,
                                           const AxisChar *value)
  @@ -554,43 +575,46 @@
       return createAttribute(localname, prefix, NULL, value);
   }
   
  +/**
  + * The localname must be specified, but all other input parameters are optional.
  + */
   IAttribute* HeaderBlock::createAttribute(const AxisChar *localname,
                                           const AxisChar *prefix,
                                           const AxisChar *uri,
                                           const AxisChar *value)
   {
   	Attribute* pAttribute=NULL;
  -  if(!localname)
  -   {
  -      localname="";
  -   }
  -   if(!prefix)
  -   {
  -      prefix="";
  -   }
  -   if(!uri)
  -   {
  -      uri="";
  -   }
  -   if(!value)
  -   {
  -      value = "";
  -   }
  +	if(!localname)
  +	{
  +		return NULL;
  +	}
  +	if(!prefix)
  +	{
  +		prefix="";
  +	}
  +	if(!uri)
  +	{
  +		uri="";
  +	}
  +	if(!value)
  +	{
  +		value = "";
  +	}
      
  -    pAttribute = new Attribute(localname, prefix, uri, value);
  -//	    m_attributes.push_back(pAttribute);
   	
  -       list<Attribute*>::iterator itCurrAttribute= m_attributes.begin();
  -       while(itCurrAttribute != m_attributes.end())
  -       {        
  -         if ((strcmp((*itCurrAttribute)->getLocalName(), localname) ==0) && (strcmp((*itCurrAttribute)->getPrefix(), prefix) ==0))
  -                return NULL;                 
  -            else
  -                itCurrAttribute++;        
  -        }    
  +	list<Attribute*>::iterator itCurrAttribute= m_attributes.begin();
  +	while(itCurrAttribute != m_attributes.end())
  +	{        
  +		if ((strcmp((*itCurrAttribute)->getLocalName(), localname) ==0) && 
  +			(strcmp((*itCurrAttribute)->getPrefix(), prefix) ==0))
  +			return NULL;
  +		else
  +			itCurrAttribute++;        
  +	}    
           
  -        m_attributes.push_back(pAttribute);
  -    return pAttribute;
  +	pAttribute = new Attribute(localname, prefix, uri, value);
  +	m_attributes.push_back(pAttribute);
  +	return pAttribute;
   }
   
   IAttribute* HeaderBlock::createStdAttribute(HEADER_BLOCK_STD_ATTR_TYPE 
  
  
  
  1.4       +7 -0      ws-axis/c/tests/auto_build/testcases/client/cpp/IHeaderBlockTest3Client.cpp
  
  Index: IHeaderBlockTest3Client.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/tests/auto_build/testcases/client/cpp/IHeaderBlockTest3Client.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- IHeaderBlockTest3Client.cpp	26 Feb 2005 12:09:36 -0000	1.3
  +++ IHeaderBlockTest3Client.cpp	1 Mar 2005 12:16:16 -0000	1.4
  @@ -31,11 +31,18 @@
   		IHeaderBlock *phb = ws.createSOAPHeaderBlock("TestHeader","http://ws.apache.org/");
   		INamespace *Insp1=phb->createNamespaceDecl(prefix,uri);			
   		INamespace *Insp2=phb->createNamespaceDecl("np1","http://axis.apache.org/");
  +
  +		IAttribute *attr1=phb->createAttribute(NULL,NULL,NULL,NULL);
  +        IAttribute *attr2=phb->createAttribute(NULL,NULL,NULL);
  +		if(attr1 || attr2)
  +			cout << "Attribute returned for NULL arguments in createAttribute"<<endl;
  +
   		const AxisChar *temp="apache";
   		const AxisChar *localname="name";	
   		IAttribute *Iattr1=phb->createAttribute(localname,prefix,temp);		
   		IAttribute *Iattr2=phb->createAttribute(localname,"np1","","Axis");		
   		IAttribute *Iattr3=phb->createAttribute(localname,"","","");		
  +
   		cout << "np:name=" << phb->getAttributeValue(localname,prefix)<<endl;
   		cout << "np1:name=" << phb->getAttributeValue("name","np1")<<endl;
   		cout <<"name=" << phb->getAttributeValue("name","")<<endl;