Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members   Examples  

HandlerBase Class Reference

interface for the Handlers. This is the base class for: -Handler -WrapperClassHandler In the Axis Architecture there are different types of Handlers : -NORMAL_HANDLER : A Handler which is used to process SOAP Headers. -WEBSERVICE_HANDLER : A web service is also considered as a Handler. -CHAIN_HANDLER : Handler Chains are also derived from Handler. Each of these handlers will inherit from this HandlerBase which serves as the base point for all the different types of Handlers. More...

#include <BasicHandler.h>

Inheritance diagram for HandlerBase:

Handler WrapperClassHandler List of all members.

Public Methods

 HandlerBase ()
virtual ~HandlerBase ()
virtual int AXISCALL invoke (void *pMsg)=0
virtual void AXISCALL onFault (void *mMsg)=0
virtual int AXISCALL init ()=0
virtual int AXISCALL fini ()=0
virtual int AXISCALL getType ()=0

Detailed Description

interface for the Handlers. This is the base class for: -Handler -WrapperClassHandler In the Axis Architecture there are different types of Handlers : -NORMAL_HANDLER : A Handler which is used to process SOAP Headers. -WEBSERVICE_HANDLER : A web service is also considered as a Handler. -CHAIN_HANDLER : Handler Chains are also derived from Handler. Each of these handlers will inherit from this HandlerBase which serves as the base point for all the different types of Handlers.

Author:
Susantha Kumara (skumara@virtusa.com) , Roshan Weerasuriya (roshan@opensource.lk, roshanw@jkcsworld.com)


Constructor & Destructor Documentation

HandlerBase::HandlerBase   [inline]
 

Constructor.

virtual HandlerBase::~HandlerBase   [inline, virtual]
 

Destructor.


Member Function Documentation

virtual int AXISCALL HandlerBase::fini   [pure virtual]
 

The finalization tasks which needs to be performed within a Handler has to be written here. This method will be automatically called by the Axis Engine when it unloads a handler.

Returns:
AXIS_SUCCESS or AXIS_FAIL to indicate success or fail.

virtual int AXISCALL HandlerBase::getType   [pure virtual]
 

Gets and returns the type of the handler. The return value could be :

  • NORMAL_HANDLER
  • WEBSERVICE_HANDLER
  • CHAIN_HANDLER
Returns:
This returns the following depending on the actual Handler type:
  • NORMAL_HANDLER : In case of a normal Handler which is used to process SOAP Headers.
  • WEBSERVICE_HANDLER : In case of a Web Service.
  • CHAIN_HANDLER : In case of a HandlerChain

Implemented in Handler, and WrapperClassHandler.

virtual int AXISCALL HandlerBase::init   [pure virtual]
 

The initialization tasks which needs to be performed within a Handler has to be written here. This method will be automatically called by the Axis Engine when it loads a handler.

Returns:
AXIS_SUCCESS or AXIS_FAIL to indicate success or fail.

virtual int AXISCALL HandlerBase::invoke void *    pMsg [pure virtual]
 

The invoke method is automatically called by the Axis Engine when it needs to execute a Handler. The main task of the handler which a Handler writer expects the Handler to be performed needs to be written within the invoke method of the Handler.

A example code segment within a invoke method which is written to process a SOAP Header is as following:

 int ESHHandler::invoke(void *pvIMsg)
 {
 IMessageData *pIMsg = (IMessageData*) pvIMsg;
    AxisChar* pachTemp;
    if(pIMsg->isPastPivot()) {
        //this is a response

        IHandlerSoapSerializer* pISZ;
        pIMsg->getSoapSerializer(&pISZ);

        IHeaderBlock* pIHeaderBlock= pISZ->createHeaderBlock();

        pIHeaderBlock->setLocalName("echoMeStringResponse");
        pIHeaderBlock->setUri("http://soapinterop.org/echoheader/");

        pachTemp = "EchoStringHeaderHandlerPr1.id";

        const AxisChar* pachHeaderVal = pIMsg->getProperty(pachTemp);
        printf("in the ESHHandler::Invoke : s
",pachHeaderVal); BasicNode* pBasicNode = pIHeaderBlock->createChild(CHARACTER_NODE); pBasicNode->setValue(pachHeaderVal); pIHeaderBlock->addChild(pBasicNode); } else { //this is a request IHandlerSoapDeSerializer* pIHandlerSoapDeSerializer; pIMsg->getSoapDeSerializer(&pIHandlerSoapDeSerializer); IHeaderBlock* pIHeaderBlock= pIHandlerSoapDeSerializer->getHeaderBlock("echoMeString", "http://soapinterop.org/echoheader/"); if (pIHeaderBlock != NULL) { const BasicNode* pBasicNode= pIHeaderBlock->getFirstChild(); const AxisChar* pachHeaderValue; if (pBasicNode != NULL) { if((pBasicNode->getNodeType()) == CHARACTER_NODE) { pachHeaderValue= pBasicNode->getValue(); } else { pachHeaderValue = "This was not the expected value Ros"; } } else { pachHeaderValue = "pBascNode is NULL"; } AxisChar* pachTmpValue = (AxisChar*) malloc(strlen(pachHeaderValue) + 4); strcpy(pachTmpValue, pachHeaderValue); pachTemp = "EchoStringHeaderHandlerPr1.id"; pIMsg->setProperty(pachTemp, pachTmpValue); free(pachTmpValue); } else { //do some thing } } return AXIS_SUCCESS; }

In case of a Web Service Handler the invoke method should do what is required by a web service invoke method, which is different from the above shown example.

Parameters:
pMsg  The MessageData object pointer. This MessageData object is passed to every handler when serving to a client request. The handler writer can get access to objects such as:
  • IHandlerSoapDeSerializer
  • IHandlerSoapSerializer
  • The properties/data/info which are set by other handlers
  • The properties/data/info which is set by the Client Stub in case the Handler is a Client side Handler. etc.
Returns:
AXIS_SUCCESS or AXIS_FAIL to indicate success or fail.

virtual void AXISCALL HandlerBase::onFault void *    mMsg [pure virtual]
 

Called when ever a fault is occured within the handler. The tasks which needs to be persormed when ever an error occurs within a Handler has to be written within this method.

Parameters:
mMsg  The MessageData object pointer. This MessageData object is passed to every handler when serving to a client request. The handler writer can get access to objects such as:
Returns:
AXIS_SUCCESS or AXIS_FAIL to indicate success or fail.


The documentation for this class was generated from the following file:
Generated on Tue Jun 29 09:27:58 2004 for AxisC++ by doxygen1.2.18