You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-user@axis.apache.org by Roshan Weerasuriya <ro...@opensource.lk> on 2004/03/02 05:11:46 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
>>