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 2004/10/25 15:32:11 UTC
cvs commit: ws-axis/c/include/axis/client Call.hpp Stub.hpp
whitlock 2004/10/25 06:32:11
Added: c/include/axis/client Call.hpp Stub.hpp
Log:
Rename external C++ headers to .hpp
Revision Changes Path
1.1 ws-axis/c/include/axis/client/Call.hpp
Index: Call.hpp
===================================================================
/*
* Copyright 2003-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* @file Call.h
*
* This file Contains the Call class and equivalent C function tables
* that all web service stubs generated by WSDL2Ws tool use to talk
* to Axis Engine.
*
* @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
* @author Sanjaya Singharage (sanjayas@opensource.lk)
* @author Samisa Abeysinghe (sabeysinghe@virtusa.com)
*/
/*
* Revision 1.1 2004/05/24 samisa
* Added accesser to transport
*/
/*
* Revision 1.2 2004/05/25 samisa
* Added accesser to SOAP serializer
*/
/*
* Revision 1.3 2004/05/31 samisa
* Added setProxy
*/
/* Call.h: interface for the Call class.*/
#if !defined(_CALL_H____OF_AXIS_INCLUDED_)
#define _CALL_H____OF_AXIS_INCLUDED_
#include "../server/GDefine.h"
#include "../server/Packet.h"
#include "../server/TypeMapping.h"
#include "../server/AxisUserAPI.h"
#include "../server/SoapEnvVersions.h"
#include "../server/WSDDDefines.h"
#include "../server/IHeaderBlock.h"
#ifdef __cplusplus
#include "../server/ISoapHeader.h"
AXIS_CPP_NAMESPACE_START
class ClientAxisEngine;
class SOAPTransport;
class MessageData;
class SoapDeSerializer;
class SoapSerializer;
AXIS_CPP_NAMESPACE_END
#else
#endif
AXIS_CPP_NAMESPACE_USE
typedef struct {
void (AXISCALL* setSOAPVersion)(void* pObj, SOAP_VERSION version);
int (AXISCALL* setTransportProperty)(void* pObj,
AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value);
int (AXISCALL* setHandlerProperty)(void* pObj,
AxisChar* name, void* value, int len);
int (AXISCALL* setProtocol)(void* pObj, AXIS_PROTOCOL_TYPE protocol);
int (AXISCALL* initialize)(void* pObj, PROVIDERTYPE nStyle, int secure);
int (AXISCALL* invoke)(void* pObj);
int (AXISCALL* unInitialize)(void* pObj);
/* Method that set the remote method name */
void (AXISCALL* setOperation)(void* pObj, const char* pchOperation,
const char* pchNamespace);
int (AXISCALL* setEndpointURI)(void* pObj, const char* pchEndpointURI);
/* Method for adding complex parameters */
void (AXISCALL* addCmplxParameter)(void* pObj, void* pObject,
void* pSZFunct, void* pDelFunct, const AxisChar* pName,
const AxisChar* pNamespace);
/* Method for adding complex type array parameters */
void (AXISCALL* addCmplxArrayParameter)(void* pObj, Axis_Array* pArray,
void* pSZFunct, void* pDelFunct, void* pSizeFunct,
const AxisChar* pName, const AxisChar* pNamespace);
/* Method for adding basic type array parameters */
void (AXISCALL* addBasicArrayParameter)(void* pObj, Axis_Array* pArray,
XSDTYPE nType, const char* pName);
/* Method for adding parameters of basic types */
void (AXISCALL* addParameter)(void* pObj, void* pValue,const char* pName,
XSDTYPE nType);
/* Methods used by stubs to get a deserialized value of an XML element
* as basic types
*/
int (AXISCALL* getElementAsInt)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
xsd__boolean (AXISCALL* getElementAsBoolean)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
unsigned int (AXISCALL* getElementAsUnsignedInt)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
short (AXISCALL* getElementAsShort)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
unsigned short (AXISCALL* getElementAsUnsignedShort)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
char (AXISCALL* getElementAsByte)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
unsigned char (AXISCALL* getElementAsUnsignedByte)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
long (AXISCALL* getElementAsLong)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
long (AXISCALL* getElementAsInteger)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
unsigned long (AXISCALL* getElementAsUnsignedLong)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
float (AXISCALL* getElementAsFloat)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
double (AXISCALL* getElementAsDouble)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
double (AXISCALL* getElementAsDecimal)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* (AXISCALL* getElementAsString)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* (AXISCALL* getElementAsAnyURI)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* (AXISCALL* getElementAsQName)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
xsd__hexBinary (AXISCALL* getElementAsHexBinary)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
xsd__base64Binary (AXISCALL* getElementAsBase64Binary)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
struct tm (AXISCALL* getElementAsDateTime)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
struct tm (AXISCALL* getElementAsDate)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
struct tm (AXISCALL* getElementAsTime)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
long (AXISCALL* getElementAsDuration)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
/* Methods used by stubs to get a deserialized value of an XML attribute
* basic types
*/
int (AXISCALL* getAttributeAsInt)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
xsd__boolean (AXISCALL* getAttributeAsBoolean)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
unsigned int (AXISCALL* getAttributeAsUnsignedInt)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
short (AXISCALL* getAttributeAsShort)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
unsigned short (AXISCALL* getAttributeAsUnsignedShort)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
char (AXISCALL* getAttributeAsByte)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
unsigned char (AXISCALL* getAttributeAsUnsignedByte)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
long (AXISCALL* getAttributeAsLong)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
long (AXISCALL* getAttributeAsInteger)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
unsigned long (AXISCALL* getAttributeAsUnsignedLong)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
float (AXISCALL* getAttributeAsFloat)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
double (AXISCALL* getAttributeAsDouble)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
double (AXISCALL* getAttributeAsDecimal)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* (AXISCALL* getAttributeAsString)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
AxisChar* (AXISCALL* getAttributeAsAnyURI)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
AxisChar* (AXISCALL* getAttributeAsQName)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
xsd__hexBinary (AXISCALL* getAttributeAsHexBinary)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
xsd__base64Binary (AXISCALL* getAttributeAsBase64Binary)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
struct tm (AXISCALL* getAttributeAsDateTime)(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace);
struct tm (AXISCALL* getAttributeAsDate)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
struct tm (AXISCALL* getAttributeAsTime)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
long (AXISCALL* getAttributeAsDuration)(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace);
/* Method used by stubs to get a deserialized value of complex types */
void* (AXISCALL* getCmplxObject)(void* pObj, void* pDZFunct,
void* pCreFunct, void* pDelFunct, const AxisChar* pName,
const AxisChar* pNamespace);
/* Method used by stubs to get a deserialized Array of complex types */
Axis_Array (AXISCALL* getCmplxArray)(void* pObj, void* pDZFunct,
void* pCreFunct, void* pDelFunct, void* pSizeFunct,
const AxisChar* pName, const AxisChar* pNamespace);
/* Method used by stubs to get a deserialized Array of basic types */
Axis_Array (AXISCALL* getBasicArray)(void* pObj, XSDTYPE nType,
const AxisChar* pName, const AxisChar* pNamespace);
int (AXISCALL* checkMessage)(void *pObj, const AxisChar* pName,
const AxisChar* pNamespace);
void* (AXISCALL* checkFault)(void *pObj, const AxisChar* pName,
const AxisChar* pNamespace);
/* Minimal error check */
int (AXISCALL* getStatus)(void *pObj);
AnyType* (AXISCALL* getAnyObject)(void *pObj);
int (AXISCALL* addAnyObject)(void *pObj, AnyType* pAnyObject);
const AxisChar* (AXISCALL* getNamespacePrefix)(void *pObj,
const AxisChar* pNamespace);
HeaderBlock_C (AXISCALL* createHeaderBlock)(void *pObj,
AxisChar *pachLocalName, AxisChar *pachUri);
} CallFunctions;
#ifdef __cplusplus
AXIS_CPP_NAMESPACE_START
class STORAGE_CLASS_INFO CallBase
{
public:
virtual void AXISCALL setSOAPVersion(SOAP_VERSION version)=0;
virtual int AXISCALL setTransportProperty(AXIS_TRANSPORT_INFORMATION_TYPE
type, const char* value)=0;
virtual int AXISCALL setHandlerProperty(AxisChar* name,
void* value, int len)=0;
virtual int AXISCALL setProtocol(AXIS_PROTOCOL_TYPE protocol)=0;
virtual int AXISCALL initialize(PROVIDERTYPE nStyle, int secure)=0;
virtual int AXISCALL invoke()=0;
virtual int AXISCALL unInitialize()=0;
/* Method that set the remote method name */
virtual void AXISCALL setOperation(const char* pchOperation,
const char* pchNamespace)=0;
virtual int AXISCALL setEndpointURI(const char* pchEndpointURI)=0;
/* Method for adding complex parameters */
virtual void AXISCALL addCmplxParameter(void* pObject, void* pSZFunct,
void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace)=0;
/* Method for adding complex type array parameters */
virtual void AXISCALL addCmplxArrayParameter(Axis_Array* pArray,
void* pSZFunct, void* pDelFunct, void* pSizeFunct,
const AxisChar* pName, const AxisChar* pNamespace)=0;
/* Method for adding basic type array parameters */
virtual void AXISCALL addBasicArrayParameter(Axis_Array* pArray,
XSDTYPE nType, const char* pName)=0;
/* Method for adding parameters of basic types */
virtual void AXISCALL addParameter(void* pValue,const char* pName,
XSDTYPE nType)=0;
/* Methods used by stubs to get a deserialized value of an XML element
* as basic types
*/
virtual int AXISCALL getElementAsInt(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual xsd__boolean AXISCALL getElementAsBoolean(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual unsigned int AXISCALL getElementAsUnsignedInt(const AxisChar*
pName, const AxisChar* pNamespace)=0;
virtual short AXISCALL getElementAsShort(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual unsigned short AXISCALL getElementAsUnsignedShort(const AxisChar*
pName, const AxisChar* pNamespace)=0;
virtual char AXISCALL getElementAsByte(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual unsigned char AXISCALL getElementAsUnsignedByte(const AxisChar*
pName, const AxisChar* pNamespace)=0;
virtual long AXISCALL getElementAsLong(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual long AXISCALL getElementAsInteger(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual unsigned long AXISCALL getElementAsUnsignedLong(const AxisChar*
pName, const AxisChar* pNamespace)=0;
virtual float AXISCALL getElementAsFloat(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual double AXISCALL getElementAsDouble(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual double AXISCALL getElementAsDecimal(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual AxisChar* AXISCALL getElementAsString(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual AxisChar* AXISCALL getElementAsAnyURI(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual AxisChar* AXISCALL getElementAsQName(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual xsd__hexBinary AXISCALL getElementAsHexBinary(const AxisChar*
pName, const AxisChar* pNamespace)=0;
virtual xsd__base64Binary AXISCALL getElementAsBase64Binary(const
AxisChar* pName, const AxisChar* pNamespace)=0;
virtual struct tm AXISCALL getElementAsDateTime(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual struct tm AXISCALL getElementAsDate(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual struct tm AXISCALL getElementAsTime(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual long AXISCALL getElementAsDuration(const AxisChar* pName,
const AxisChar* pNamespace)=0;
/* Methods used by stubs to get a deserialized value of XML attribute
* as basic types
*/
virtual int AXISCALL getAttributeAsInt(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual xsd__boolean AXISCALL getAttributeAsBoolean(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual unsigned int AXISCALL getAttributeAsUnsignedInt(const AxisChar*
pName, const AxisChar* pNamespace)=0;
virtual short AXISCALL getAttributeAsShort(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual unsigned short AXISCALL getAttributeAsUnsignedShort(const
AxisChar* pName, const AxisChar* pNamespace)=0;
virtual char AXISCALL getAttributeAsByte(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual unsigned char AXISCALL getAttributeAsUnsignedByte(const AxisChar*
pName, const AxisChar* pNamespace)=0;
virtual long AXISCALL getAttributeAsLong(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual long AXISCALL getAttributeAsInteger(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual unsigned long AXISCALL getAttributeAsUnsignedLong(const AxisChar*
pName, const AxisChar* pNamespace)=0;
virtual float AXISCALL getAttributeAsFloat(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual double AXISCALL getAttributeAsDouble(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual double AXISCALL getAttributeAsDecimal(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual AxisChar* AXISCALL getAttributeAsString(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual AxisChar* AXISCALL getAttributeAsAnyURI(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual AxisChar* AXISCALL getAttributeAsQName(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual xsd__hexBinary AXISCALL getAttributeAsHexBinary(const AxisChar*
pName, const AxisChar* pNamespace)=0;
virtual xsd__base64Binary AXISCALL getAttributeAsBase64Binary(const
AxisChar* pName, const AxisChar* pNamespace)=0;
virtual struct tm AXISCALL getAttributeAsDateTime(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual struct tm AXISCALL getAttributeAsDate(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual struct tm AXISCALL getAttributeAsTime(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual long AXISCALL getAttributeAsDuration(const AxisChar* pName,
const AxisChar* pNamespace)=0;
/* Method used by stubs to get a deserialized value of complex types */
virtual void* AXISCALL getCmplxObject(void* pDZFunct, void* pCreFunct,
void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace)=0;
/* Method used by stubs to get a deserialized Array of complex types */
virtual Axis_Array AXISCALL getCmplxArray(void* pDZFunct, void* pCreFunct,
void* pDelFunct, void* pSizeFunct, const AxisChar* pName,
const AxisChar* pNamespace)=0;
/* Method used by stubs to get a deserialized Array of basic types */
virtual Axis_Array AXISCALL getBasicArray(XSDTYPE nType,
const AxisChar* pName, const AxisChar* pNamespace)=0;
virtual int AXISCALL checkMessage(const AxisChar* pName,
const AxisChar* pNamespace)=0;
virtual void* AXISCALL checkFault(const AxisChar* pName,
const AxisChar* pNamespace)=0;
/* Minimal error check */
virtual int AXISCALL getStatus()=0;
virtual AnyType* AXISCALL getAnyObject()=0;
virtual int AXISCALL addAnyObject(AnyType* pAnyObject)=0;
virtual const AxisChar* AXISCALL getNamespacePrefix
(const AxisChar* pNamespace)=0;
virtual IHeaderBlock* AXISCALL createHeaderBlock(AxisChar *pachLocalName,
AxisChar *pachUri)=0;
/* following stuff is needed to provide the interface for C web services */
public:
static CallFunctions ms_VFtable;
static bool bInitialized;
/* add static functions for all interface functions here */
static void AXISCALL s_SetSOAPVersion(void* pObj, SOAP_VERSION version)
{((CallBase*)pObj)->setSOAPVersion(version);};
static int AXISCALL s_SetTransportProperty(void* pObj,
AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value)
{ return ((CallBase*)pObj)->setTransportProperty(type,value);};
static int AXISCALL s_SetHandlerProperty(void* pObj,
AxisChar* name, void* value, int len)
{ return ((CallBase*)pObj)->setHandlerProperty(name,value,len);};
static int AXISCALL s_SetProtocol(void* pObj, AXIS_PROTOCOL_TYPE protocol)
{ return ((CallBase*)pObj)->setProtocol(protocol);};
static int AXISCALL s_InitializeCall(void* pObj, PROVIDERTYPE nStyle,
int secure)
{ return ((CallBase*)pObj)->initialize(nStyle, secure);};
static int AXISCALL s_Invoke(void* pObj)
{ return ((CallBase*)pObj)->invoke();};
static int AXISCALL s_UnInitialize(void* pObj)
{ return ((CallBase*)pObj)->unInitialize();};
/* Method that set the remote method name */
static void AXISCALL s_SetOperation(void* pObj, const char* pchOperation,
const char* pchNamespace)
{ ((CallBase*)pObj)->setOperation(pchOperation, pchNamespace);};
static int AXISCALL s_SetEndpointURI(void* pObj,
const char* pchEndpointURI)
{ return ((CallBase*)pObj)->setEndpointURI(pchEndpointURI);};
static void AXISCALL s_AddParameter(void* pObj, void* pValue,
const AxisChar* pchName, XSDTYPE type)
{ ((CallBase*)pObj)->addParameter(pValue, pchName, type);};
static void AXISCALL s_AddCmplxArrayParameter(void* pObj,
Axis_Array* pArray, void* pSZFunct, void* pDelFunct, void* pSizeFunct,
const AxisChar* pName, const AxisChar* pNamespace)
{ ((CallBase*)pObj)->addCmplxArrayParameter(pArray, pSZFunct, pDelFunct,
pSizeFunct, pName, pNamespace);};
static void AXISCALL s_AddBasicArrayParameter(void* pObj,
Axis_Array* pArray, XSDTYPE nType, const AxisChar* pName)
{ ((CallBase*)pObj)->addBasicArrayParameter(pArray, nType, pName);};
static void AXISCALL s_AddCmplxParameter(void* pObj, void* pObject,
void* pDZFunct, void* pDelFunct, const AxisChar* pName,
const AxisChar* pNamespace)
{ ((CallBase*)pObj)->addCmplxParameter(pObject, pDZFunct, pDelFunct, pName,
pNamespace);};
static int AXISCALL s_GetElementAsInt(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsInt(pName, pNamespace);};
static xsd__boolean AXISCALL s_GetElementAsBoolean(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsBoolean(pName, pNamespace);};
static unsigned int AXISCALL s_GetElementAsUnsignedInt(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsUnsignedInt(pName, pNamespace);};
static short AXISCALL s_GetElementAsShort(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsShort(pName, pNamespace);};
static unsigned short AXISCALL s_GetElementAsUnsignedShort(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsUnsignedShort(pName, pNamespace);};
static char AXISCALL s_GetElementAsByte(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsByte(pName, pNamespace);};
static unsigned char AXISCALL s_GetElementAsUnsignedByte(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsUnsignedByte(pName, pNamespace);};
static long AXISCALL s_GetElementAsLong(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsLong(pName, pNamespace);};
static long AXISCALL s_GetElementAsInteger(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsInteger(pName, pNamespace);};
static unsigned long AXISCALL s_GetElementAsUnsignedLong(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsUnsignedLong(pName, pNamespace);};
static float AXISCALL s_GetElementAsFloat(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsFloat(pName, pNamespace);};
static double AXISCALL s_GetElementAsDouble(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsDouble(pName, pNamespace);};
static double AXISCALL s_GetElementAsDecimal(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsDouble(pName, pNamespace);};
static AxisChar* AXISCALL s_GetElementAsString(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsString(pName, pNamespace);};
static AxisChar* AXISCALL s_GetElementAsAnyURI(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsAnyURI(pName, pNamespace);};
static AxisChar* AXISCALL s_GetElementAsQName(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsQName(pName, pNamespace);};
static xsd__hexBinary AXISCALL s_GetElementAsHexBinary(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsHexBinary(pName, pNamespace);};
static xsd__base64Binary AXISCALL s_GetElementAsBase64Binary(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsBase64Binary(pName, pNamespace);};
static struct tm AXISCALL s_GetElementAsDateTime(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsDateTime(pName, pNamespace);};
static struct tm AXISCALL s_GetElementAsDate(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsDate(pName, pNamespace);};
static struct tm AXISCALL s_GetElementAsTime(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsTime(pName, pNamespace);};
static long AXISCALL s_GetElementAsDuration(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getElementAsDuration(pName, pNamespace);};
static int AXISCALL s_GetAttributeAsInt(void* pObj, const AxisChar* pName,
const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsInt(pName, pNamespace);};
static xsd__boolean AXISCALL s_GetAttributeAsBoolean(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsBoolean(pName, pNamespace);};
static unsigned int AXISCALL s_GetAttributeAsUnsignedInt(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsUnsignedInt(pName, pNamespace);};
static short AXISCALL s_GetAttributeAsShort(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsShort(pName, pNamespace);};
static unsigned short AXISCALL s_GetAttributeAsUnsignedShort(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsUnsignedShort(pName,
pNamespace);};
static char AXISCALL s_GetAttributeAsByte(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsByte(pName, pNamespace);};
static unsigned char AXISCALL s_GetAttributeAsUnsignedByte(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsUnsignedByte(pName,
pNamespace);};
static long AXISCALL s_GetAttributeAsLong(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsLong(pName, pNamespace);};
static long AXISCALL s_GetAttributeAsInteger(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsInteger(pName, pNamespace);};
static unsigned long AXISCALL s_GetAttributeAsUnsignedLong(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsUnsignedLong(pName,
pNamespace);};
static float AXISCALL s_GetAttributeAsFloat(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsFloat(pName, pNamespace);};
static double AXISCALL s_GetAttributeAsDouble(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsDouble(pName, pNamespace);};
static double AXISCALL s_GetAttributeAsDecimal(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsDecimal(pName, pNamespace);};
static AxisChar* AXISCALL s_GetAttributeAsString(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsString(pName, pNamespace);};
static AxisChar* AXISCALL s_GetAttributeAsAnyURI(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsAnyURI(pName, pNamespace);};
static AxisChar* AXISCALL s_GetAttributeAsQName(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsQName(pName, pNamespace);};
static xsd__hexBinary AXISCALL s_GetAttributeAsHexBinary(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsHexBinary(pName, pNamespace);};
static xsd__base64Binary AXISCALL s_GetAttributeAsBase64Binary(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsBase64Binary(pName,
pNamespace);};
static struct tm AXISCALL s_GetAttributeAsDateTime(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsDateTime(pName, pNamespace);};
static struct tm AXISCALL s_GetAttributeAsDate(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsDate(pName, pNamespace);};
static struct tm AXISCALL s_GetAttributeAsTime(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsTime(pName, pNamespace);};
static long AXISCALL s_GetAttributeAsDuration(void* pObj,
const AxisChar* pName, const AxisChar* pNamespace)
{ return ((CallBase*)pObj)->getAttributeAsDuration(pName, pNamespace);};
static Axis_Array AXISCALL s_GetCmplxArray(void* pObj, void* pDZFunct,
void* pCreFunct, void* pDelFunct, void* pSizeFunct,
const AxisChar* pName, const AxisChar* pNamespace)
{return ((CallBase*)pObj)->getCmplxArray(pDZFunct, pCreFunct, pDelFunct,
pSizeFunct, pName, pNamespace);};
static Axis_Array AXISCALL s_GetBasicArray(void* pObj, XSDTYPE nType,
const AxisChar* pName, const AxisChar* pNamespace)
{return ((CallBase*)pObj)->getBasicArray(nType, pName, pNamespace);};
static void* AXISCALL s_GetCmplxObject(void* pObj, void* pDZFunct,
void* pCreFunct, void* pDelFunct, const AxisChar* pName,
const AxisChar* pNamespace)
{return ((CallBase*)pObj)->getCmplxObject(pDZFunct, pCreFunct, pDelFunct,
pName, pNamespace);};
static int AXISCALL s_CheckMessage(void *pObj, const AxisChar* pName,
const AxisChar* pNamespace)
{return ((CallBase*)pObj)->checkMessage(pName, pNamespace);};
static void* AXISCALL s_CheckFault(void *pObj, const AxisChar* pName,
const AxisChar* pNamespace)
{return ((CallBase*)pObj)->checkFault(pName, pNamespace);};
/* Minimal error check */
static int AXISCALL s_GetStatus(void *pObj)
{return ((CallBase*)pObj)->getStatus();};
static AnyType* AXISCALL s_GetAnyObject(void *pObj)
{return ((CallBase*)pObj)->getAnyObject();};
static int AXISCALL s_AddAnyObject(void *pObj, AnyType* pAnyObject)
{return ((CallBase*)pObj)->addAnyObject(pAnyObject);};
static const AxisChar* AXISCALL s_GetNamespacePrefix(void *pObj,
const AxisChar* pNamespace)
{return ((CallBase*)pObj)->getNamespacePrefix(pNamespace);};
static HeaderBlock_C AXISCALL s_CreateHeaderBlock(void *pObj,
AxisChar *pachLocalName, AxisChar *pachUri);
/* and populate ms_VFtable with corresponding entry */
static void s_Initialize();
};
/* A separate call class object should be used by each thread */
class STORAGE_CLASS_INFO Call : public CallBase
{
public:
Call();
virtual ~Call();
void AXISCALL setSOAPVersion(SOAP_VERSION version);
int AXISCALL setTransportProperty(AXIS_TRANSPORT_INFORMATION_TYPE type,
const char* value);
int AXISCALL setHandlerProperty(AxisChar* name, void* value, int len);
int AXISCALL setProtocol(AXIS_PROTOCOL_TYPE protocol);
int AXISCALL unInitialize();
int AXISCALL initialize(PROVIDERTYPE nStyle, int secure);
int AXISCALL invoke();
/* Method for adding complex parameters */
void AXISCALL addCmplxParameter(void* pObject, void* pSZFunct,
void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
/* Method for adding complex type array parameters */
void AXISCALL addCmplxArrayParameter(Axis_Array* pArray, void* pSZFunct,
void* pDelFunct, void* pSizeFunct, const AxisChar* pName,
const AxisChar* pNamespace);
/* Method for adding basic type array parameters */
void AXISCALL addBasicArrayParameter(Axis_Array* pArray, XSDTYPE nType,
const AxisChar* pName);
/* Method for adding parameters of basic types */
void AXISCALL addParameter(void* pValue,const char* pchName,
XSDTYPE nType);
/* Method that set the remote method name */
void AXISCALL setOperation(const char* pchOperation,
const char* pchNamespace);
int AXISCALL setEndpointURI(const char* pchEndpointURI);
public:
IHeaderBlock* AXISCALL createHeaderBlock(AxisChar *pachLocalName,
AxisChar *pachUri);
IHeaderBlock* createHeaderBlock();
int setSoapHeader(ISoapHeader *pSoapHeader);
/* Methods used by stubs to get a deserialized value of XML element
* as basic types
*/
int AXISCALL getElementAsInt(const AxisChar* pName,
const AxisChar* pNamespace);
int AXISCALL getFaultDetail(char** ppcDetail);
xsd__boolean AXISCALL getElementAsBoolean(const AxisChar* pName,
const AxisChar* pNamespace);
unsigned int AXISCALL getElementAsUnsignedInt(const AxisChar* pName,
const AxisChar* pNamespace);
short AXISCALL getElementAsShort(const AxisChar* pName,
const AxisChar* pNamespace);
unsigned short AXISCALL getElementAsUnsignedShort(const AxisChar* pName,
const AxisChar* pNamespace);
char AXISCALL getElementAsByte(const AxisChar* pName,
const AxisChar* pNamespace);
unsigned char AXISCALL getElementAsUnsignedByte(const AxisChar* pName,
const AxisChar* pNamespace);
long AXISCALL getElementAsLong(const AxisChar* pName,
const AxisChar* pNamespace);
long AXISCALL getElementAsInteger(const AxisChar* pName,
const AxisChar* pNamespace);
unsigned long AXISCALL getElementAsUnsignedLong(const AxisChar* pName,
const AxisChar* pNamespace);
float AXISCALL getElementAsFloat(const AxisChar* pName,
const AxisChar* pNamespace);
double AXISCALL getElementAsDouble(const AxisChar* pName,
const AxisChar* pNamespace);
double AXISCALL getElementAsDecimal(const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* AXISCALL getElementAsString(const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* AXISCALL getElementAsAnyURI(const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* AXISCALL getElementAsQName(const AxisChar* pName,
const AxisChar* pNamespace);
xsd__hexBinary AXISCALL getElementAsHexBinary(const AxisChar* pName,
const AxisChar* pNamespace);
xsd__base64Binary AXISCALL getElementAsBase64Binary(const AxisChar* pName,
const AxisChar* pNamespace);
struct tm AXISCALL getElementAsDateTime(const AxisChar* pName,
const AxisChar* pNamespace);
struct tm AXISCALL getElementAsDate(const AxisChar* pName,
const AxisChar* pNamespace);
struct tm AXISCALL getElementAsTime(const AxisChar* pName,
const AxisChar* pNamespace);
long AXISCALL getElementAsDuration(const AxisChar* pName,
const AxisChar* pNamespace);
/* Methods used by stubs to get a deserialized value of a XML attribute
* as basic types
*/
int AXISCALL getAttributeAsInt(const AxisChar* pName,
const AxisChar* pNamespace);
xsd__boolean AXISCALL getAttributeAsBoolean(const AxisChar* pName,
const AxisChar* pNamespace);
unsigned int AXISCALL getAttributeAsUnsignedInt(const AxisChar* pName,
const AxisChar* pNamespace);
short AXISCALL getAttributeAsShort(const AxisChar* pName,
const AxisChar* pNamespace);
unsigned short AXISCALL getAttributeAsUnsignedShort(const AxisChar* pName,
const AxisChar* pNamespace);
char AXISCALL getAttributeAsByte(const AxisChar* pName,
const AxisChar* pNamespace);
unsigned char AXISCALL getAttributeAsUnsignedByte(const AxisChar* pName,
const AxisChar* pNamespace);
long AXISCALL getAttributeAsLong(const AxisChar* pName,
const AxisChar* pNamespace);
long AXISCALL getAttributeAsInteger(const AxisChar* pName,
const AxisChar* pNamespace);
unsigned long AXISCALL getAttributeAsUnsignedLong(const AxisChar* pName,
const AxisChar* pNamespace);
float AXISCALL getAttributeAsFloat(const AxisChar* pName,
const AxisChar* pNamespace);
double AXISCALL getAttributeAsDouble(const AxisChar* pName,
const AxisChar* pNamespace);
double AXISCALL getAttributeAsDecimal(const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* AXISCALL getAttributeAsString(const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* AXISCALL getAttributeAsAnyURI(const AxisChar* pName,
const AxisChar* pNamespace);
AxisChar* AXISCALL getAttributeAsQName(const AxisChar* pName,
const AxisChar* pNamespace);
xsd__hexBinary AXISCALL getAttributeAsHexBinary(const AxisChar* pName,
const AxisChar* pNamespace);
xsd__base64Binary AXISCALL getAttributeAsBase64Binary(const AxisChar*
pName, const AxisChar* pNamespace);
struct tm AXISCALL getAttributeAsDateTime(const AxisChar* pName,
const AxisChar* pNamespace);
struct tm AXISCALL getAttributeAsDate(const AxisChar* pName,
const AxisChar* pNamespace);
struct tm AXISCALL getAttributeAsTime(const AxisChar* pName,
const AxisChar* pNamespace);
long AXISCALL getAttributeAsDuration(const AxisChar* pName,
const AxisChar* pNamespace);
/* Method used by stubs to get a deserialized value of complex types */
void* AXISCALL getCmplxObject(void* pDZFunct, void* pCreFunct,
void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
/* Method used by stubs to get a deserialized Array of complex types */
Axis_Array AXISCALL getCmplxArray(void* pDZFunct, void* pCreFunct,
void* pDelFunct, void* pSizeFunct, const AxisChar* pName,
const AxisChar* pNamespace);
/* Method used by stubs to get a deserialized Array of basic types */
Axis_Array AXISCALL getBasicArray(XSDTYPE nType, const AxisChar* pName,
const AxisChar* pNamespace);
int AXISCALL checkMessage(const AxisChar* pName,
const AxisChar* pNamespace);
void* AXISCALL checkFault(const AxisChar* pName,
const AxisChar* pNamespace);
int AXISCALL getStatus();
SOAPTransport* getTransport() { return m_pTransport; }
SoapSerializer* getSOAPSerializer() { return (SoapSerializer*)m_pIWSSZ; }
/**
* Set proxy server and port for transport.
*
* @param pcProxyHost Host name of proxy server
* @param uiProxyPort Port of proxy server
*/
void setProxy(const char* pcProxyHost, unsigned int uiProxyPort);
AnyType* AXISCALL getAnyObject();
int AXISCALL addAnyObject(AnyType* pAnyObject);
const AxisChar* AXISCALL getNamespacePrefix(const AxisChar* pNamespace);
private:
int openConnection(int secure);
void closeConnection();
int makeArray();
private:
ClientAxisEngine* m_pAxisEngine;
list<void*> m_handlerProperties;
/*
Following are pointers to relevant objects of the ClientAxisEngine
instance. So they do not belong to this object and are not created
or deleted
*/
SoapSerializer* m_pIWSSZ;
SoapDeSerializer* m_pIWSDZ;
char* m_pcEndPointUri;
AXIS_PROTOCOL_TYPE m_nTransportType;
/*
Transport object
*/
SOAPTransport* m_pTransport;
/* Minimal error check */
int m_nStatus;
/**
* Proxy server name.
*/
string m_strProxyHost;
/**
* Proxy server port.
*/
unsigned int m_uiProxyPort;
/**
* Use Proxy or not?
*/
bool m_bUseProxy;
/**
* If this object calls initialize_module, this will be set to true.
* Helps keep track of whether to call uninitialize_module in destructor.
* It is possible that initialize_module could have been called already.
*/
bool m_bModuleInitialized;
};
AXIS_CPP_NAMESPACE_END
#endif
#ifdef __cplusplus
extern "C" {
#endif
STORAGE_CLASS_INFO void* getStubObject(AXIS_PROTOCOL_TYPE nProtocol,
AxisChar* pchEndpointURI);
STORAGE_CLASS_INFO void destroyStubObject(void* pCall);
#ifdef __cplusplus
}
#endif
#endif
1.1 ws-axis/c/include/axis/client/Stub.hpp
Index: Stub.hpp
===================================================================
/*
* Copyright 2003-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* @file Stub.h
*
* Contains the Stub base class that all C++ web service stubs inherit
* from. The functions in this Stub base class provides the client
* application some added functionality to manipulate the SOAP messages.
*/
/*
* Revision 1.1 2004/05/31 samisa
* Added setProxy
*/
/*
* Revision 1.2 2004/05/31 roshan
* Added calling conventions
*/
/*
* Revision 1.3 2004/06/01 roshan
* Added setSOAPMethodAttribute
*/
/*
* Revision 1.4 2004/06/08 samisa
* Added setTransportTimeout
*/
/*
* Revision 1.5 2004/06/10 samisa
* Added doxygen comments to help autobuild API docs
*/
/*
* Revision 1.6 2004/06/13 roshan
* Added doxygen comments to help autobuild API docs
*/
/*
* Revision 1.13 2004/06/13 susantha
* Added support for writing C web services and handlers
*/
#if !defined(_STUB_H____OF_AXIS_INCLUDED_)
#define _STUB_H____OF_AXIS_INCLUDED_
#include <axis/client/Call.h>
#include <axis/server/Attribute.h>
#ifdef __cplusplus
#include <vector>
AXIS_CPP_NAMESPACE_START
using namespace std;
AXIS_CPP_NAMESPACE_END
#endif
/**
* @struct StubFunctions
*
* Structure that defines the set of function pointers that correspond
* to the Stub base class's functions. These functions are provided to
* C Stubs by Axis in order to have the same functionalities as those
* in Stub base class.
* @brief Structure with function pointer definitions to provide Stub
* base class's functionalities for C stubs.
*/
typedef struct {
void (AXISCALL* setEndpoint)(void* pObj, const char* pchEndpoint);
void (AXISCALL* setTransportProperty)(void* pObj,
const char *pcKey, const char *pcValue);
char* (AXISCALL* getFirstTrasportPropertyKey)(void* pObj);
char* (AXISCALL* getNextTrasportPropertyKey)(void* pObj);
char* (AXISCALL* getCurrentTrasportPropertyKey)(void* pObj);
char* (AXISCALL* getCurrentTrasportPropertyValue)(void* pObj);
void (AXISCALL* deleteCurrentTrasportProperty)(void* pObj);
void (AXISCALL* deleteTrasportProperty)(void* pObj, char* pcKey,
unsigned int uiOccurance);
void (AXISCALL* setHandlerProperty)(void* pObj, AxisChar* name,
void* value, int len);
HeaderBlock_C (AXISCALL* createSOAPHeaderBlock)(void* pObj,
AxisChar * pachLocalName, AxisChar * pachUri);
HeaderBlock_C (AXISCALL* getFirstSOAPHeaderBlock)(void* pObj);
HeaderBlock_C (AXISCALL* getNextSOAPHeaderBlock)(void* pObj);
HeaderBlock_C (AXISCALL* getCurrentSOAPHeaderBlock)(void* pObj);
void (AXISCALL* deleteCurrentSOAPHeaderBlock)(void* pObj);
void (AXISCALL* deleteSOAPHeaderBlock)(void* pObj,
HeaderBlock_C hdrBlk);
void (AXISCALL* setProxy)(void* pObj, const char* pcProxyHost,
unsigned int uiProxyPort);
void (AXISCALL* setSOAPMethodAttribute)(void* pObj,
const AxisChar *pLocalname, const AxisChar *pPrefix,
const AxisChar* pUri, const AxisChar *pValue);
Attribute_C (AXISCALL* getFirstSOAPMethodAttribute)(void* pObj);
Attribute_C (AXISCALL* getNextSOAPMethodAttribute)(void* pObj);
Attribute_C (AXISCALL* getCurrentSOAPMethodAttribute)(void* pObj);
void (AXISCALL* deleteCurrentSOAPMethodAttribute)(void* pObj);
void (AXISCALL* deleteSOAPMethodAttribute)(void* pObj,
Attribute_C Attr);
void (AXISCALL* setTransportTimeout)(void* pObj, const long lSeconds);
int (AXISCALL* getStatus)(void* pObj);
const AxisChar* (AXISCALL* getNamespacePrefix)(void* pObj,
const AxisChar* pNamespace);
} StubFunctions;
#ifdef __cplusplus
/**
* @class Stub
*
* @brief This is the client Stub base class to be inherited by all stub
* classes genarated by WSDL2WS tool. This class acts as the interface
* between the users and the Axis C++ engine (client side). Programmer
* can use the API defined here to enrich the client application
* functionality. Setting transport properties, setting SOAP headers,
* setting connection timeout and specifying a proxy on the client stub
* is facilitated with this interface.
*
* @author Samisa Abeysinghe (sabeysinghe@virtusa.com)
* @author Roshan Weerasuriya (roshan@opensource.lk, roshanw@jkcsworld.com)
* @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
*/
AXIS_CPP_NAMESPACE_START
class STORAGE_CLASS_INFO Stub
{
public:
/**
* Constructor.
*
* @param pcEndPointURI End point URI of the service to connect to.
* e.g. http://localhost:8080/axis/services/echo
* @param eProtocol The protocol that this stub should use to communicate
* with the endpoint. See AXIS_PROTOCOL_TYPE in GDefine.h for
* possible values for eProtocol.
*/
Stub(const char *pcEndPointURI, AXIS_PROTOCOL_TYPE eProtocol);
/**
* Default Constructor.
*/
/**
* Destructor.
*/
virtual ~Stub();
/**
* Set end point of service to connect to.
*
* @param pcEndPointURI End point URI of the service to connect to.
* e.g. http://localhost:8080/axis/services/echo
*/
void AXISCALL setEndPoint(const char *pcEndPointURI);
/**
* Set transport property.
*
* Handling the semantics of the headers is up to the user.
* The user has to make sure that the key:value paires passed to this method
* would make sense at trasport level.
* The Stub class does not validate the key value paires to see if the properties
* make sense to the undelying trasport.
*
* Some example trasport properties:
* <BR> For HTTP: "Accept-Language: da, en-gb;q=0.8, en;q=0.7"
* <BR> For SMTP: "Reply-To: user@apache.org"
*
* @param pcKey Header name e.g. "Accept-Language".
* Note that the key is not tested for uniqueness.
* One can set several values to the same key and they all will
* appear in the outgoing trasport header.
* e.g. If the method is called twise with (k,v1) and (k,v2)
* both k:v1 and k:v2 will appear in trasport header as
* seperate properties.
* @param pcValue Header value e.g. "da, en-gb;q=0.8, en;q=0.7"
*/
void AXISCALL setTransportProperty(const char *pcKey, const char *pcValue);
/**
* Iterator initiatior for trasport property keys
*
* This method must be called first to initiate access to the list of
* transport property keys.
*
* @return First transport property key. If there are no trasport
* properties set, returns NULL.
*/
char* getFirstTrasportPropertyKey();
/**
* Iterator for trasport property keys
*
* getFirstTrasportPropertyKey() method must have been called at least once
* before this method is called. If not behaviour is undefined.
*
* This method advances the iterator by one position.
* Repeated calls always retuen the next value.
*
* @return Next transport property key. If there are no trasport
* properties set or if iterator is at the end of the list, returns NULL.
*/
char* getNextTrasportPropertyKey();
/**
* Accessor for trasport property keys.
*
* This method gives access to the key corresponding to the trasport key
* currently being pointed by trasport property key iterator.
*
* getFirstTrasportPropertyKey() method must have been called at least once
* before this method is called. If not behaviour is undefined.
*
* This method does not advance the iterator.
* Repeated calls always retuen the same key unless
* getNextTrasportPropertyKey() is called in between.
*
* @return Current transport property key. If there are no trasport
* properties set or if iterator is at the end of the list, returns NULL.
*/
char* getCurrentTrasportPropertyKey();
/**
* Accessor for trasport property values.
*
* This method gives access to the value corresponding to the trasport key
* currently being pointed by trasport property key iterator.
* As keys and values are treated as paires, access to the value field is
* based on the access to the key field.
*
* getFirstTrasportPropertyKey() method must have been called at least once
* before this method is called. If not behaviour is undefined.
*
* This method does not advance the iterator.
* Repeated calls always retuen the same value unless
* getNextTrasportPropertyKey() is called in between.
*
* @return Current transport property value. If there are no trasport
* properties set or if iterator is at the end of the list, returns NULL.
*/
char* getCurrentTrasportPropertyValue();
/**
* Deletes the trasport property key:value pair currently pointed to by
* the iterator.
*/
void deleteCurrentTrasportProperty();
/**
* Deletes the given occerance of the trasport property key:value pair
* corresponding to the given key.
*
* This method does not advance the iterator in line with the deletes done.
* In case you want to access the trasport properties after using this
* method, it is advisable to reinitialize the iterator using
* getFirstTrasportPropertyKey();
* However you can use this method despite where the iterator is
* pointing currently.
*
* @param pcKey Key of the trasport property key:value pair to be deleted
* If the given key is not set currently, nothing will happen.
* @param uiOccurance Which occerance of the key to be deleted, because
* there can be multiple values for the same key.
* Default is to delete the first occurance.
* Count starts from 1.
*/
void deleteTrasportProperty(char* pcKey, unsigned int uiOccurance = 1);
/**
* Sets a property that can be accessed from a handler.
*
* @param name The name of the property
* @param value The value of the property
* @param len The length of the value
*/
void setHandlerProperty(AxisChar* name, void* value, int len);
/**
* Create and add a SOAP header block to the Stub.
*
* This will create a header block that would look like the following when
* serialized:
* <PRE>
* <th:TestHeader xmlns:th="http://ws.apache.org/axisCppTest/">
* </th:TestHeader>
* </PRE>
*
* User must use the IHeaderBlock pointer returned and fill in the header structure.
* e.g. To make the SOAP header look like
* <PRE>
* <SOAP-ENV:Header>
* <th:TestHeader xmlns:th="http://ws.apache.org/axisCppTest/">
* <Credentials>
* <username>Test User</username>
* <password>Test Password</password>
* </Credentials>
* </th:TestHeader>
* </SOAP-ENV:Header>
* </PRE>
* the following code segment coule be used
* <PRE>
* IHeaderBlock *phb = ws.createSOAPHeaderBlock("TestHeader", "th",
* "http://ws.apache.org/axisCppTest/");
* //create parent node
* BasicNode *parentNode = phb->createChild(ELEMENT_NODE);
* parentNode->setLocalName("Credentials");
* //create child node
* BasicNode *childNode = phb->createChild(ELEMENT_NODE);
* childNode->setLocalName("username");
* //create char node for value
* BasicNode *valueNode = phb->createChild(CHARACTER_NODE);
* valueNode->setValue("Test User");
* //buld node tree
* childNode->addChild(valueNode);
* parentNode->addChild(childNode);
*
* //add another node set
* childNode = phb->createChild(ELEMENT_NODE);
* childNode->setLocalName("password");
*
* valueNode = phb->createChild(CHARACTER_NODE);
* valueNode->setValue("Test Password");
*
* childNode->addChild(valueNode);
* parentNode->addChild(childNode);
*
* phb->addChild(parentNode);
* </PRE>
*
* @param pachLocalName Local tag name of the SOAP header. e.g. TestHeader
* @param pachPrefix Prefix to be used in XML represenation of SOAP header
* e.g. th
* @param pachUri Namespace URI to be used in SOAP header.
e.g http://ws.apache.org/axisCppTestHeader/
*
* @return Pointer to the creater SOAP header block.
*/
IHeaderBlock * AXISCALL createSOAPHeaderBlock(AxisChar * pachLocalName,
AxisChar * pachUri);
/**
* Iterator initiatior for SOAP header blocks
*
* This method must be called first to initiate access to the list of
* SOAP header blocks.
*
* @return First SOAP header block pointer. If there are no SOAP header
* blocks set, returns NULL.
*/
IHeaderBlock* getFirstSOAPHeaderBlock();
/**
* Iterator for SOAP header blocks
*
* getFirstSOAPHeaderBlock() method must have been called at least once
* before this method is called. If not behaviour is undefined.
*
* This method advances the iterator by one position.
* Repeated calls always retuen the next value.
*
* @return Next SOAP header block pointer. If there are no SOAP header
* blocks set or if iterator is at the end of the list, returns NULL.
*/
IHeaderBlock* getNextSOAPHeaderBlock();
/**
* Accessor for SOAP header blocks
*
* This method gives access to the SOAP header block pointer corresponding
* to the SOAP header block currently being pointed by SOAP header blocks
* iterator.
*
* getFirstSOAPHeaderBlock() method must have been called at least once
* before this method is called. If not behaviour is undefined.
*
* This method does not advance the iterator.
* Repeated calls always retuen the same key unless
* getNextSOAPHeaderBlock() is called in between.
*
* @return Current SOAP header block pointer. If there are no SOAP header
* block set or if iterator is at the end of the list, returns NULL.
*/
IHeaderBlock* getCurrentSOAPHeaderBlock();
/**
* Deletes the SOAP header block currently pointed to by
* the iterator.
*/
void deleteCurrentSOAPHeaderBlock();
/**
* Deletes the given SOAP header block pointer from the current list of
* SOAP header blocks.
*
* This method does a pointer comparison. It does not compare the contents
* within objects.
* Hence it is expected that either the pointer returned by the
* create method or by one of the iterator methods would be used with
* this method.
*
* This method does not advance the iterator in line with the deletes done.
* In case you want to access the SOAP header blocks after using this
* method, it is advisable to reinitialize the iterator using
* getFirstSOAPHeaderBlock();
* However you can use this method despite where the iterator is
* pointing currently.
*
* @param pHeaderBlock Pointer of the header block to be deleted.
*/
void deleteSOAPHeaderBlock(IHeaderBlock* pHeaderBlock);
/**
* Set proxy server and port for transport.
*
* @param pcProxyHost Host name of proxy server
* @param uiProxyPort Port of proxy server
*/
void setProxy(const char* pcProxyHost, unsigned int uiProxyPort);
/**
* Sets a Attribute to the SOAPMethod, using the given Attribute data.
*
* @param pLocalname The local name of the Attribute.
* @param pPrefix The prefix of the Attribute.
* @param pValue The value of the Attribute.
*/
void setSOAPMethodAttribute(const AxisChar *pLocalname, const AxisChar *pPrefix, const AxisChar *pValue);
/**
* Sets a Attribute to the SOAPMethod, using the given Attribute data.
*
* @param pLocalname The local name of the Attribute.
* @param pPrefix The prefix of the Attribute.
* @param pUri The namespace uri of the Attribute.
* @param pValue The value of the Attribute.
*/
void setSOAPMethodAttribute(const AxisChar *pLocalname, const AxisChar *pPrefix, const AxisChar* pUri, const AxisChar *pValue);
/**
* Iterator initiatior for SOAP method attributes
*
* This method must be called first to initiate access to the list of
* SOAP method attributes.
*
* @return First SOAP method attribute pointer. If there are no SOAP method
* attributes set, returns NULL.
*/
Attribute* getFirstSOAPMethodAttribute();
/**
* Iterator for SOAP method attributes
*
* getFirstSOAPMethodAttribute() method must have been called at least once
* before this method is called. If not behaviour is undefined.
*
* This method advances the iterator by one position.
* Repeated calls always retuen the next value.
*
* @return Next SOAP method attribute pointer. If there are no SOAP method
* attributes set or if iterator is at the end of the list, returns NULL.
*/
Attribute* getNextSOAPMethodAttribute();
/**
* Accessor for SOAP method attributes
*
* This method gives access to the SOAP method attribute pointer corresponding
* to the SOAP method attribute currently being pointed by SOAP method
* attributes iterator.
*
* getFirstSOAPMethodAttribute() method must have been called at least once
* before this method is called. If not behaviour is undefined.
*
* This method does not advance the iterator.
* Repeated calls always retuen the same key unless
* getNextSOAPMethodAttribute() is called in between.
*
* @return Current SOAP method attribute pointer. If there are no SOAP method
* attribute set or if iterator is at the end of the list, returns NULL.
*/
Attribute* getCurrentSOAPMethodAttribute();
/**
* Deletes the SOAP method attribute currently pointed to by
* the iterator.
*/
void deleteCurrentSOAPMethodAttribute();
/**
* Deletes the given occerance of the SOAP method attribute from
* the current list of SOAP method attributes
*
* This method does a pointer comparison. It does not compare the contents
* within objects.
* Hence it is expected that either the pointer returned by the
* create method or by one of the iterator methods would be used with
* this method.
*
* This method does not advance the iterator in line with the deletes done.
* In case you want to access the SOAP method attributes after using this
* method, it is advisable to reinitialize the iterator using
* getFirstSOAPMethodAttribute();
* However you can use this method despite where the iterator is
* pointing currently.
*
* @param pAttribute Pointer of Attribute to be deleted
*/
void deleteSOAPMethodAttribute(Attribute* pAttribute);
/**
* Set transport timeout.
*
* @param lSeconds Timeout in seconds.
* If lSeconds is 0, then the transport will assume no
* timeout. Hence you want to reset a timeout already set
* use 0.
*/
void setTransportTimeout(const long lSeconds);
/**
* Get the status of the stub to see any error situation
*/
int getStatus();
/**
* Get a namespace prefix for a given namespace URI
*/
const AxisChar* AXISCALL getNamespacePrefix(const AxisChar* pNamespace);
public:
static StubFunctions ms_VFtable;
static bool bInitialized;
/* add static functions for all interface functions here */
static void AXISCALL s_setEndpoint(void* pObj, const char* pchEndpoint)
{((Stub*)pObj)->setEndPoint(pchEndpoint);};
static void AXISCALL s_setTransportProperty(void* pObj,
const char *pcKey, const char *pcValue)
{((Stub*)pObj)->setTransportProperty(pcKey, pcValue);};
static char* AXISCALL s_getFirstTrasportPropertyKey(void* pObj)
{return ((Stub*)pObj)->getFirstTrasportPropertyKey();};
static char* AXISCALL s_getNextTrasportPropertyKey(void* pObj)
{return ((Stub*)pObj)->getNextTrasportPropertyKey();};
static char* AXISCALL s_getCurrentTrasportPropertyKey(void* pObj)
{return ((Stub*)pObj)->getCurrentTrasportPropertyKey();};
static char* AXISCALL s_getCurrentTrasportPropertyValue(void* pObj)
{return ((Stub*)pObj)->getCurrentTrasportPropertyValue();};
static void AXISCALL s_deleteCurrentTrasportProperty(void* pObj)
{((Stub*)pObj)->deleteCurrentTrasportProperty();};
static void AXISCALL s_deleteTrasportProperty(void* pObj, char* pcKey,
unsigned int uiOccurance)
{((Stub*)pObj)->deleteTrasportProperty(pcKey, uiOccurance);};
static void AXISCALL s_setHandlerProperty(void* pObj, AxisChar* name,
void* value, int len)
{((Stub*)pObj)->setHandlerProperty(name, value, len);};
static HeaderBlock_C AXISCALL s_createSOAPHeaderBlock(void* pObj,
AxisChar * pachLocalName, AxisChar * pachUri);
static HeaderBlock_C AXISCALL s_getFirstSOAPHeaderBlock(void* pObj);
static HeaderBlock_C AXISCALL s_getNextSOAPHeaderBlock(void* pObj);
static HeaderBlock_C AXISCALL s_getCurrentSOAPHeaderBlock(void* pObj);
static void AXISCALL s_deleteCurrentSOAPHeaderBlock(void* pObj)
{((Stub*)pObj)->deleteCurrentSOAPHeaderBlock();};
static void AXISCALL s_deleteSOAPHeaderBlock(void* pObj,
HeaderBlock_C hdrBlk)
{((Stub*)pObj)->deleteSOAPHeaderBlock((IHeaderBlock*)hdrBlk._object);};
static void AXISCALL s_setProxy(void* pObj, const char* pcProxyHost,
unsigned int uiProxyPort)
{((Stub*)pObj)->setProxy(pcProxyHost, uiProxyPort);};
static void AXISCALL s_setSOAPMethodAttribute(void* pObj,
const AxisChar *pLocalname, const AxisChar *pPrefix,
const AxisChar* pUri, const AxisChar *pValue)
{((Stub*)pObj)->setSOAPMethodAttribute(pLocalname, pPrefix, pUri,
pValue);};
static Attribute_C AXISCALL s_getFirstSOAPMethodAttribute(void* pObj);
static Attribute_C AXISCALL s_getNextSOAPMethodAttribute(void* pObj);
static Attribute_C AXISCALL s_getCurrentSOAPMethodAttribute(void* pObj);
static void AXISCALL s_deleteCurrentSOAPMethodAttribute(void* pObj)
{((Stub*)pObj)->deleteCurrentSOAPMethodAttribute();};
static void AXISCALL s_deleteSOAPMethodAttribute(void* pObj,
Attribute_C Attr)
{((Stub*)pObj)->deleteSOAPMethodAttribute((Attribute*)Attr._object);};
static void AXISCALL s_setTransportTimeout(void* pObj,
const long lSeconds)
{((Stub*)pObj)->setTransportTimeout(lSeconds);};
static int AXISCALL s_getStatus(void* pObj)
{return ((Stub*)pObj)->getStatus();};
static const AxisChar* AXISCALL s_getNamespacePrefix(void* pObj,
const AxisChar* pNamespace)
{return ((Stub*)pObj)->getNamespacePrefix(pNamespace);};
static void s_Initialize();
protected:
/**
* Apply user set preferences to each call made on the Stub object.
* This method is required because Axis engine holds only part of the state
* with refereance to subsequent calls on the same Stub object.
* Foxing this approach would make the engine much more efficient.
*/
void applyUserPreferences();
/**
* Set transport properties stored in m_vKeys and m_vValues vectors.
* Called by applyUserPreferences for each and every method invocation.
*/
void setTransportProperties();
/**
* Set SOAP Headers stored in m_vSOAPHeaderBlock vector.
* Called by applyUserPreferences for each and every method invocation.
*/
void setSOAPHeaders();
/**
* Set SOAP method attributes stored in m_vSOAPMethodAttributes vector.
* Called by applyUserPreferences for each and every method invocation.
*/
void setSOAPMethodAttributes();
/**
* Set transport timeout stored in mm_lTimeoutSeconds
* Called by applyUserPreferences for each and every method invocation.
*/
void setTransportTimeout();
/**
* Call object of the Stub. This is the point of access to the internals
* of the Axis engine.
*/
Call *m_pCall;
/**
* Trasport property keys
*/
vector < char *>m_vKeys;
/**
* Trasport keys iterator
*/
vector <char*>::iterator m_viCurrentKey;
/**
* Trasport property values
*/
vector < char *>m_vValues;
/**
* Trasport keys iterator
*/
vector <char*>::iterator m_viCurrentValue;
/**
* Vector of Header Blok pointers
*/
vector < IHeaderBlock * >m_vSOAPHeaderBlocks;
/**
* Trasport keys iterator
*/
vector <IHeaderBlock *>::iterator m_viCurrentSOAPHeaderBlock;
/**
* List of SOAPMethod Attributes
*/
vector <Attribute*> m_vSOAPMethodAttributes;
/**
* Trasport keys iterator
*/
vector <Attribute*>::iterator m_viCurrentSOAPMethodAttribute;
/**
* Timeout in seconds
*/
long m_lTimeoutSeconds;
};
AXIS_CPP_NAMESPACE_END
#endif
typedef struct {
void* _object; /* this will be C++ Call Object */
CallFunctions* _functions; /* this is the static function table */
void* _stub_object; /* the stub object */
StubFunctions* _stub_functions; /* this is the static function table */
} Call_C;
#ifndef __cplusplus
typedef Call_C Call;
#endif
#endif /* !defined(_STUB_H____OF_AXIS_INCLUDED_) */