You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by Roshan Weerasuriya <ro...@opensource.lk> on 2004/03/02 05:04:33 UTC

RE : Improving Hanlder writing api

hi all,

The code is commited to the CVS. (Actualy I am sorry fot the late notice, 
the code was commited on last saturday) You could find these files at,
1. CVSHome/ws-axis/c/include/axis/common
2. CVSHome/ws-axis/c/include/axis/soap
3. CVSHome/ws-axis/c/src/common
4. CVSHome/ws-axis/c/src/soap

rgds,
roshan


At 09:09 AM 2/25/2004 +0600, you wrote:
>hi all,
>
>The changes include:
>
>Adding following methods to the following classes.
>
>The following let the handler writer access the Header Block and traverse 
>through it to get the relavent info.
>
>- SoapDeSerializer, IHandlerSoapDeSerializer : let the handler writer get 
>the HeaderBlock by providing the local name and namespace uri
>- SoapHeader : let the handler writer get the HeaderBlock by providing the 
>local name and namespace uri
>- IHeaderBlock:
>         BasicNode* getFirstChild()=0;
>         BasicNode* getLastChild() =0;
>         BasicNode* getChild(int iChildPosition) =0;
>
>- HeaderBlock :
>         BasicNode* getFirstChild(),
>         BasicNode* getLastChild(),
>         BasicNode* getChild(int iChildPosition) // get the child by 
> giving the positon
>         getNoOfChildren() // get the no of available children
>- BasicNode :
>         //The following let the handler writer traverse throuhg the children
>         int getNoOfChildren();
>         BasicNode* getFirstChild();
>         BasicNode* getLastChild();
>         BasicNode* getChild(int iChildPosition);
>
>- ComplexElement:
>         int getNoOfChildren();
>         BasicNode* getChild(int iChildPosition);
>         BasicNode* getLastChild();
>         BasicNode* getFirstChild();
>         NODE_TYPE getNodeType();
>
>- CharacterElement:
>         const AxisChar* getValue();
>
>Also some of the following methods are to be used for various other 
>activities such as when creating header blocks by handlers and client apps.
>
>- IHeaderBlock:
>         BasicNode* createChild(NODE_TYPE eNODE_TYPE,  AxisChar 
> *pachLocalName, AxisChar *pachPrefix, AxisChar *pachUri, AxisChar* pachValue);
>         BasicNode* createImmediateChild(NODE_TYPE eNODE_TYPE, AxisChar 
> *pachLocalName, AxisChar *pachPrefix, AxisChar *pachUri, AxisChar* pachValue);
>         Attribute* createStdAttribute(HEADER_BLOCK_STD_ATTR_TYPE 
> eStdAttrType, SOAP_VERSION eSOAP_VERSION);
>         Attribute* createAttribute(const AxisChar* localname, const 
> AxisChar* prefix, const AxisChar* uri, const AxisChar* value);
>         Attribute* createAttribute(const AxisChar *localname, const 
> AxisChar *prefix, const AxisChar *value);
>
>A eg code sample from a client who will add a soap header to the soap 
>reqest is as following.
>
>         .....
>         //-----------Adding SOAP Header-----------
>         IHeaderBlock* pIHeaderBlock = 
> m_pCall->createHeaderBlock("reservation", "m", 
> "http://travelcompany.example.org/reservation");
>
>         pIHeaderBlock->createStdAttribute(ROLE_NEXT, SOAP_VER_1_2);
>         pIHeaderBlock->createStdAttribute(MUST_UNDERSTAND_TRUE, 
> SOAP_VER_1_2);
>
>         BasicNode* pBasicNode = 
> pIHeaderBlock->createImmediateChild(ELEMENT_NODE, "reference", "m", "", "");
>         BasicNode* pBasicNode2 = 
> pIHeaderBlock->createChild(CHARACTER_NODE, "", "", "", 
> "uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d");
>         pBasicNode->addChild(pBasicNode2);
>
>         BasicNode* pBasicNode3 = 
> pIHeaderBlock->createImmediateChild(ELEMENT_NODE, "dateAndTime", "m", "", "");
>         BasicNode* pBasicNode4 = 
> pIHeaderBlock->createChild(CHARACTER_NODE, "", "", "", 
> "2001-11-29T13:20:00.000-05:00");
>         pBasicNode3->addChild(pBasicNode4);
>         //-----------End of Adding SOAP Header-----------
>         .....
>
>
>A eg code sample from a handler written to process a header is as following.
>
>IHeaderBlock* pIHeaderBlock= 
>pIHandlerSoapDeSerializer->GetHeaderBlock("reservation", 
>"http://travelcompany.example.org/reservation");
>if (pIHeaderBlock != NULL) {
>         BasicNode* pBasicNode= pIHeaderBlock->getFirstChild();
>         BasicNode* pBasicNode2= pBasicNode->getFirstChild();
>
>         const AxisChar* pachHeaderValue;
>         const AxisChar* pachHeaderValue2;
>
>         if((pBasicNode2->getNodeType()) == CHARACTER_NODE) {
>                 pachHeaderValue= pBasicNode2->getValue();
>         }
>
>         BasicNode* pBasicNode3= pIHeaderBlock->getLastChild();
>         BasicNode* pBasicNode4 =pBasicNode3->getFirstChild();
>         if((pBasicNode4->getNodeType()) == CHARACTER_NODE) {
>                 pachHeaderValue2= pBasicNode4->getValue();
>         }
>
>         .....
>}
>
>If you need any further clarification please come back.
>
>rgds,
>roshan
>
>At 02:15 PM 2/24/2004 +0600, you wrote:
>>hi Jean,
>>
>> >I think you are talking about processing messages "à la" JAX-RPC 
>> message handler ?
>>This is baiscaly to support hanlder writers, to support processing soap 
>>headers.
>>
>> >I yes when the client side messaging handling is planned ?
>>The client side handlers are also to be supported in the near future.
>>
>>rgds,
>>roshan
>>
>>
>>At 01:41 PM 2/23/2004 +0000, you wrote:
>>>Hi Roshan,
>>>
>>>I think you are talking about processing messages "à la" JAX-RPC message 
>>>handler ?
>>>
>>>I yes when the client side messaging handling is planned ?
>>>
>>>After a quick look on the code it seem to be only for the server side by 
>>>now (server.wsdd).
>>>
>>>For the API looking at JAX-RPC seem to be a good starting point...
>>>
>>>Regards,
>>>
>>>Jean-Yves
>>>
>>>
>>> >hi all,
>>> >
>>> >I have been working on improving the handler writing api, 
>>> since >currently it doesn't have much support on handler writing.
>>> >I would like to get your comments if any in this regard.
>>> >
>>> >rgds,
>>> >roshan
>>
>
>