[
https://issues.apache.org/jira/browse/AXISCPP-1010?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
nadir amra resolved AXISCPP-1010.
---------------------------------
Resolution: Fixed
Fix Version/s: current (nightly)
Done, just need to create or update a testcase. But the code is in svn.
> new method Call:clearSOAPMethodAttributes()
> -------------------------------------------
>
> Key: AXISCPP-1010
> URL: https://issues.apache.org/jira/browse/AXISCPP-1010
> Project: Axis-C++
> Issue Type: Improvement
> Components: Client - API
> Affects Versions: 1.6 Beta
> Environment: WIN2K VS6SP6 JDK1.5.0:07
> Reporter: Franz Fehringer
> Assigned To: nadir amra
> Fix For: current (nightly)
>
>
> I invented a new method Call:clearSOAPMethodAttributes() to avoid double
> serializing of the same attributes at operation level.
> The relevant svn diffs are given below.
> An example scenario
> ppt->getCall()->initialize(CPP_DOC_PROVIDER);
> ppt->getCall()->setTransportProperty(SOAPACTION_HEADER , "#SearchRooms");
> ppt->getCall()->setSOAPVersion(SOAP_VER_1_1);
> ppt->getCall()->setOperation("SearchRoomsRequest",
> "http://www.pegs-pegstour.com/API/XMLSchema/1.0.1");
> ppt->getCall()->clearSOAPMethodAttributes();
> ppt->getCall()->setSOAPMethodAttribute("returnRateNotes", "", "false");
> ppt->getCall()->setSOAPMethodAttribute("returnAllocationRemaining", "",
> "true");
> ppt->getCall()->setSOAPMethodAttribute("includeOnRequest", "", "true");
> ppt->getCall()->setSOAPMethodAttribute("includeNonSeamless", "", "false");
> ppt->getCall()->setSOAPMethodAttribute("checkAvailabilityLevel", "", "ROOM");
> $ pwd
> /cd/d/Quellen/SVN/axis/c/include
> Index: axis/client/Call.hpp
> ===================================================================
> --- axis/client/Call.hpp (Revision 480584)
> +++ axis/client/Call.hpp (Arbeitskopie)
> @@ -250,6 +250,8 @@
> const AxisChar * pUri,
> const AxisChar * pValue);
>
> + void clearSOAPMethodAttributes();
> +
> /**
> * Method for adding complex parameters to the engine, ready to be
> serialised.
> * An example of this method (taken from the automatically generated
> stubs
> $ pwd
> /cd/d/Quellen/SVN/axis/c/src/soap
> Index: SoapSerializer.h
> ===================================================================
> --- SoapSerializer.h (Revision 480584)
> +++ SoapSerializer.h (Arbeitskopie)
> @@ -197,6 +197,8 @@
> IHeaderBlock* getNextHeaderBlock();
>
> int setSOAPMethodAttribute(Attribute* pAttribute);
> + void clearSOAPMethodAttributes();
> +
> SoapMethod* getSOAPMethod();
> IHeaderBlock* createHeaderBlock(const AxisChar *pachLocalName,
> const AxisChar *pachUri);
> Index: SoapMethod.h
> ===================================================================
> --- SoapMethod.h (Revision 480584)
> +++ SoapMethod.h (Arbeitskopie)
> @@ -89,12 +89,19 @@
> virtual ~SoapMethod();
>
> /**
> - * This methos will clear up all the current out params in preperation of
> a
> + * This method will clear up all the current out params in preparation of
> a
> * new method call
> */
> void clearOutParams();
> +
> + /**
> + * This method will clear up all the current attributes in preparation of
> a
> + * new method call
> + */
> + void clearAttributes();
> };
>
> AXIS_CPP_NAMESPACE_END
>
> #endif
> +
> ndex: SoapSerializer.cpp
> ===================================================================
> --- SoapSerializer.cpp (Revision 480584)
> +++ SoapSerializer.cpp (Arbeitskopie)
> @@ -1021,6 +1021,15 @@
> return AXIS_FAIL;
> }
>
> +void SoapSerializer::clearSOAPMethodAttributes()
> +{
> + if (m_pSoapEnvelope && m_pSoapEnvelope->m_pSoapBody &&
> + m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod)
> + {
> + m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->clearAttributes();
> + }
> +}
> +
> int SoapSerializer::serializeAnyObject( AnyType * pAnyObject)
> {
> for( int i = 0; i < pAnyObject->_size; i++)
> Index: SoapMethod.cpp
> ===================================================================
> --- SoapMethod.cpp (Revision 480584)
> +++ SoapMethod.cpp (Arbeitskopie)
> @@ -225,5 +225,18 @@
> m_OutputParams.clear();
> }
>
> +void SoapMethod::clearAttributes()
> +{
> + if (m_attributes.empty())
> + return;
> +
> + list<Attribute*>::iterator it;
> +
> + for (it = m_attributes.begin(); it != m_attributes.end(); ++it)
> + delete *it;
> +
> + m_attributes.clear();
> +}
> +
> AXIS_CPP_NAMESPACE_END
>
> $ pwd
> /cd/d/Quellen/SVN/axis/c/src/engine/client
> Index: Call.cpp
> ===================================================================
> --- Call.cpp (Revision 480584)
> +++ Call.cpp (Arbeitskopie)
> @@ -1088,6 +1088,11 @@
> m_pIWSSZ->setSOAPMethodAttribute( ((Attribute *) pAttribute)->clone());
> }
>
> +void Call::clearSOAPMethodAttributes()
> +{
> + m_pIWSSZ->clearSOAPMethodAttributes();
> +}
> +
> xsd__string Call::getFaultAsXMLString()
> {
> return m_pIWSDZ->getFaultAsXMLString();
> @@ -1229,4 +1234,4 @@
> it++;
> }
> m_soapFaults.clear();
> -}
> \ Kein Zeilenvorschub am Ende der Datei
> +}
> Index: Stub.cpp
> ===================================================================
> --- Stub.cpp (Revision 480584)
> +++ Stub.cpp (Arbeitskopie)
> @@ -39,6 +39,7 @@
> m_pCall->setProtocol (eProtocol);
> m_pTransport = m_pCall->getTransport ();
> m_pTransport->setEndpointUri( pcEndPointUri);
> + m_viCurrentSOAPHeaderBlock = m_vSOAPHeaderBlocks.end();
>
> // SSL channel related initilizations
> char * pcSSLChannelInfo = g_pConfig->getAxisConfProperty(
> AXCONF_SECUREINFO);
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]