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

Call.hpp

00001 /*
00002  *   Copyright 2003-2004 The Apache Software Foundation.
00003 // (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved
00004  *
00005  *   Licensed under the Apache License, Version 2.0 (the "License");
00006  *   you may not use this file except in compliance with the License.
00007  *   You may obtain a copy of the License at
00008  *
00009  *       http://www.apache.org/licenses/LICENSE-2.0
00010  *
00011  *   Unless required by applicable law or agreed to in writing, software
00012  *   distributed under the License is distributed on an "AS IS" BASIS,
00013  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014  *   See the License for the specific language governing permissions and
00015  *   limitations under the License.
00016  *
00017  */
00018 
00031 /*
00032  * Revision 1.1  2004/05/24 samisa
00033  * Added accesser to transport 
00034  */
00035  
00036 /*
00037  * Revision 1.2  2004/05/25 samisa
00038  * Added accesser to SOAP serializer 
00039  */
00040 
00041 /*
00042  * Revision 1.3  2004/05/31 samisa
00043  * Added setProxy
00044  */
00045 
00046 /* Call.h: interface for the Call class.*/
00047 
00048 
00049 #if !defined(_CALL_H____OF_AXIS_INCLUDED_)
00050 #define _CALL_H____OF_AXIS_INCLUDED_
00051 
00052 #include "../GDefine.hpp"
00053 #include "../TypeMapping.hpp"
00054 #include "../AxisUserAPI.hpp"
00055 #include "../WSDDDefines.hpp"
00056 #include "../IHeaderBlock.hpp"
00057 
00058 AXIS_CPP_NAMESPACE_START
00059 
00060 class ClientAxisEngine;
00061 class SOAPTransport;
00062 class MessageData;
00063 class SoapDeSerializer;
00064 class SoapSerializer;
00065 
00066 class STORAGE_CLASS_INFO CallBase
00067 {
00068 public:
00069     virtual void AXISCALL setSOAPVersion(SOAP_VERSION version)=0;
00070     virtual int AXISCALL setTransportProperty(AXIS_TRANSPORT_INFORMATION_TYPE
00071         type, const char* value)=0;
00072         virtual int AXISCALL setHandlerProperty(AxisChar* name, 
00073                 void* value, int len)=0;
00074     virtual int AXISCALL setProtocol(AXIS_PROTOCOL_TYPE protocol)=0;
00075     virtual int AXISCALL initialize(PROVIDERTYPE nStyle)=0;
00076     virtual int AXISCALL invoke()=0;
00077     virtual int AXISCALL unInitialize()=0;
00078 
00079     /* Method that set the remote method name */
00080     virtual void AXISCALL setOperation(const char* pchOperation,
00081         const char* pchNamespace)=0;
00082     virtual int AXISCALL setEndpointURI(const char* pchEndpointURI)=0;
00083 
00084     /* Method for adding complex parameters */
00085     virtual void AXISCALL addCmplxParameter(void* pObject, void* pSZFunct,
00086         void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace)=0;
00087     /* Method for adding complex type array parameters */
00088     virtual void AXISCALL addCmplxArrayParameter(Axis_Array* pArray,
00089         void* pSZFunct, void* pDelFunct, void* pSizeFunct,
00090         const AxisChar* pName, const AxisChar* pNamespace)=0;
00091     /* Method for adding basic type array parameters */
00092     virtual void AXISCALL addBasicArrayParameter(Axis_Array* pArray,
00093         XSDTYPE nType, const char* pName)=0;
00094     /* Method for adding parameters of basic types */
00095     virtual void AXISCALL addParameter(void* pValue,const char* pName,
00096         XSDTYPE nType)=0;
00097 
00098     /* Methods used by stubs to get a deserialized value of an XML element
00099      * as basic types
00100      */
00101     virtual xsd__int * AXISCALL getElementAsInt(const AxisChar* pName,
00102         const AxisChar* pNamespace)=0;
00103     virtual xsd__boolean * AXISCALL getElementAsBoolean(const AxisChar* pName,
00104         const AxisChar* pNamespace)=0;
00105     virtual xsd__unsignedInt * AXISCALL getElementAsUnsignedInt(const AxisChar*
00106         pName, const AxisChar* pNamespace)=0;
00107     virtual xsd__short * AXISCALL getElementAsShort(const AxisChar* pName,
00108         const AxisChar* pNamespace)=0;
00109     virtual xsd__unsignedShort * AXISCALL getElementAsUnsignedShort(const AxisChar*
00110         pName, const AxisChar* pNamespace)=0;
00111     virtual xsd__byte * AXISCALL getElementAsByte(const AxisChar* pName,
00112         const AxisChar* pNamespace)=0;
00113     virtual xsd__unsignedByte * AXISCALL getElementAsUnsignedByte(const AxisChar*
00114         pName, const AxisChar* pNamespace)=0;
00115     virtual xsd__long * AXISCALL getElementAsLong(const AxisChar* pName,
00116         const AxisChar* pNamespace)=0;
00117     virtual xsd__integer * AXISCALL getElementAsInteger(const AxisChar* pName,
00118         const AxisChar* pNamespace)=0;
00119     virtual xsd__unsignedLong * AXISCALL getElementAsUnsignedLong(const AxisChar*
00120         pName, const AxisChar* pNamespace)=0;
00121     virtual xsd__float * AXISCALL getElementAsFloat(const AxisChar* pName,
00122         const AxisChar* pNamespace)=0;
00123     virtual xsd__double * AXISCALL getElementAsDouble(const AxisChar* pName,
00124         const AxisChar* pNamespace)=0;
00125     virtual xsd__decimal * AXISCALL getElementAsDecimal(const AxisChar* pName,
00126         const AxisChar* pNamespace)=0;
00127     virtual xsd__string AXISCALL getElementAsString(const AxisChar* pName,
00128         const AxisChar* pNamespace)=0;
00129     virtual xsd__anyURI AXISCALL getElementAsAnyURI(const AxisChar* pName,
00130         const AxisChar* pNamespace)=0;
00131     virtual xsd__QName AXISCALL getElementAsQName(const AxisChar* pName,
00132         const AxisChar* pNamespace)=0;
00133     virtual xsd__hexBinary * AXISCALL getElementAsHexBinary(const AxisChar*
00134         pName, const AxisChar* pNamespace)=0;
00135     virtual xsd__base64Binary * AXISCALL getElementAsBase64Binary(const
00136         AxisChar* pName, const AxisChar* pNamespace)=0;
00137     virtual xsd__dateTime * AXISCALL getElementAsDateTime(const AxisChar* pName,
00138         const AxisChar* pNamespace)=0;
00139     virtual xsd__date * AXISCALL getElementAsDate(const AxisChar* pName,
00140         const AxisChar* pNamespace)=0;
00141     virtual xsd__time * AXISCALL getElementAsTime(const AxisChar* pName,
00142         const AxisChar* pNamespace)=0;
00143     virtual xsd__duration * AXISCALL getElementAsDuration(const AxisChar* pName,
00144         const AxisChar* pNamespace)=0;
00145 
00146     /* Methods used by stubs to get a deserialized value of XML attribute
00147      * as basic types
00148      */
00149     virtual xsd__int * AXISCALL getAttributeAsInt(const AxisChar* pName,
00150         const AxisChar* pNamespace)=0;
00151     virtual xsd__boolean * AXISCALL getAttributeAsBoolean(const AxisChar* pName,
00152         const AxisChar* pNamespace)=0;
00153     virtual xsd__unsignedInt * AXISCALL getAttributeAsUnsignedInt(const AxisChar*
00154         pName, const AxisChar* pNamespace)=0;
00155     virtual xsd__short * AXISCALL getAttributeAsShort(const AxisChar* pName,
00156         const AxisChar* pNamespace)=0;
00157     virtual xsd__unsignedShort * AXISCALL getAttributeAsUnsignedShort(const
00158         AxisChar* pName, const AxisChar* pNamespace)=0;
00159     virtual xsd__byte * AXISCALL getAttributeAsByte(const AxisChar* pName,
00160         const AxisChar* pNamespace)=0;
00161     virtual xsd__unsignedByte * AXISCALL getAttributeAsUnsignedByte(const AxisChar*
00162         pName, const AxisChar* pNamespace)=0;
00163     virtual xsd__long * AXISCALL getAttributeAsLong(const AxisChar* pName,
00164         const AxisChar* pNamespace)=0;
00165     virtual xsd__integer * AXISCALL getAttributeAsInteger(const AxisChar* pName,
00166         const AxisChar* pNamespace)=0;
00167     virtual xsd__unsignedLong * AXISCALL getAttributeAsUnsignedLong(const AxisChar*
00168         pName, const AxisChar* pNamespace)=0;
00169     virtual xsd__float * AXISCALL getAttributeAsFloat(const AxisChar* pName,
00170         const AxisChar* pNamespace)=0;
00171     virtual xsd__double * AXISCALL getAttributeAsDouble(const AxisChar* pName,
00172         const AxisChar* pNamespace)=0;
00173     virtual xsd__decimal * AXISCALL getAttributeAsDecimal(const AxisChar* pName,
00174         const AxisChar* pNamespace)=0;
00175     virtual xsd__string AXISCALL getAttributeAsString(const AxisChar* pName,
00176         const AxisChar* pNamespace)=0;
00177     virtual xsd__anyURI AXISCALL getAttributeAsAnyURI(const AxisChar* pName,
00178         const AxisChar* pNamespace)=0;
00179     virtual xsd__QName AXISCALL getAttributeAsQName(const AxisChar* pName,
00180         const AxisChar* pNamespace)=0;
00181     virtual xsd__hexBinary * AXISCALL getAttributeAsHexBinary(const AxisChar*
00182         pName, const AxisChar* pNamespace)=0;
00183     virtual xsd__base64Binary * AXISCALL getAttributeAsBase64Binary(const
00184         AxisChar* pName, const AxisChar* pNamespace)=0;
00185     virtual xsd__dateTime * AXISCALL getAttributeAsDateTime(const AxisChar* pName,
00186         const AxisChar* pNamespace)=0;
00187     virtual xsd__date * AXISCALL getAttributeAsDate(const AxisChar* pName,
00188         const AxisChar* pNamespace)=0;
00189     virtual xsd__time * AXISCALL getAttributeAsTime(const AxisChar* pName,
00190         const AxisChar* pNamespace)=0;
00191     virtual xsd__duration * AXISCALL getAttributeAsDuration(const AxisChar* pName,
00192         const AxisChar* pNamespace)=0;
00193 
00194     /* Method used by stubs to get a deserialized value of complex types */
00195     virtual void* AXISCALL getCmplxObject(void* pDZFunct, void* pCreFunct,
00196         void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace)=0;
00197     /* Method used by stubs to get a deserialized Array of complex types */
00198     virtual Axis_Array AXISCALL getCmplxArray(void* pDZFunct, void* pCreFunct,
00199         void* pDelFunct, void* pSizeFunct, const AxisChar* pName,
00200         const AxisChar* pNamespace)=0;
00201     /* Method used by stubs to get a deserialized Array of basic types */
00202     virtual Axis_Array AXISCALL getBasicArray(XSDTYPE nType,
00203         const AxisChar* pName, const AxisChar* pNamespace)=0;
00204 
00205     virtual int AXISCALL checkMessage(const AxisChar* pName,
00206         const AxisChar* pNamespace)=0;
00207 
00208     virtual void* AXISCALL checkFault(const AxisChar* pName,
00209         const AxisChar* pNamespace)=0;
00210 
00211     /* Minimal error check */
00212     virtual int AXISCALL getStatus()=0;
00213 
00214     virtual AnyType* AXISCALL getAnyObject()=0;
00215     virtual int AXISCALL addAnyObject(AnyType* pAnyObject)=0;
00216     virtual const AxisChar* AXISCALL getNamespacePrefix
00217         (const AxisChar* pNamespace)=0;
00218 
00219     virtual IHeaderBlock* AXISCALL createHeaderBlock(AxisChar *pachLocalName,
00220         AxisChar *pachUri)=0;
00221 
00222     virtual IHeaderBlock* AXISCALL createHeaderBlock(AxisChar *pachLocalName,
00223         AxisChar *pachUri, AxisChar *pachPrefix)=0;
00224 
00225     static bool bInitialized;
00226 };
00227 
00228 /* A separate call class object should be used by each thread */
00229 class STORAGE_CLASS_INFO Call : public CallBase
00230 {
00231 public:
00232     Call();
00233     virtual ~Call();
00234     void AXISCALL setSOAPVersion(SOAP_VERSION version);
00235     int AXISCALL setTransportProperty(AXIS_TRANSPORT_INFORMATION_TYPE type,
00236         const char* value);
00237         const char* AXISCALL getTransportProperty(const char *key, bool response=true);
00238         int AXISCALL setHandlerProperty(AxisChar* name, void* value, int len);
00246     int AXISCALL setProtocol(AXIS_PROTOCOL_TYPE protocol);
00251     AXIS_PROTOCOL_TYPE AXISCALL getProtocol();
00252     int AXISCALL unInitialize();
00253     int AXISCALL initialize(PROVIDERTYPE nStyle);
00254     int AXISCALL invoke();
00255 
00266     void setSOAPMethodAttribute(const AxisChar *pLocalname, const AxisChar *pPrefix, const AxisChar *pValue);
00267 
00276     void setSOAPMethodAttribute(const AxisChar *pLocalname, const AxisChar *pPrefix, const AxisChar* pUri, const AxisChar *pValue);
00277 
00278     /* Method for adding complex parameters */
00279     void AXISCALL addCmplxParameter(void* pObject, void* pSZFunct,
00280         void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
00281     /* Method for adding complex type array parameters */
00282     void AXISCALL addCmplxArrayParameter(Axis_Array* pArray, void* pSZFunct,
00283         void* pDelFunct, void* pSizeFunct, const AxisChar* pName,
00284         const AxisChar* pNamespace);
00285     /* Method for adding basic type array parameters */
00286     void AXISCALL addBasicArrayParameter(Axis_Array* pArray, XSDTYPE nType,
00287         const AxisChar* pName);
00288     /* Method for adding parameters of basic types */
00289     void AXISCALL addParameter(void* pValue,const char* pchName,
00290         XSDTYPE nType);
00291 
00292     /* Method that set the remote method name */
00293     void AXISCALL setOperation(const char* pchOperation,
00294         const char* pchNamespace);
00295     int AXISCALL setEndpointURI(const char* pchEndpointURI);
00296 public:
00297     IHeaderBlock* AXISCALL createHeaderBlock(AxisChar *pachLocalName,
00298         AxisChar *pachUri);
00299     IHeaderBlock* AXISCALL createHeaderBlock(AxisChar *pachLocalName,
00300         AxisChar *pachUri, AxisChar *pachPrefix);
00301     IHeaderBlock* createHeaderBlock();
00302     /* Methods used by stubs to get a deserialized value of XML element
00303      * as basic types
00304      */
00305     xsd__int * AXISCALL getElementAsInt(const AxisChar* pName,
00306         const AxisChar* pNamespace);
00307     xsd__boolean * AXISCALL getElementAsBoolean(const AxisChar* pName,
00308         const AxisChar* pNamespace);
00309     xsd__unsignedInt * AXISCALL getElementAsUnsignedInt(const AxisChar* pName,
00310         const AxisChar* pNamespace);
00311     xsd__short * AXISCALL getElementAsShort(const AxisChar* pName,
00312         const AxisChar* pNamespace);
00313     xsd__unsignedShort * AXISCALL getElementAsUnsignedShort(const AxisChar* pName,
00314         const AxisChar* pNamespace);
00315     xsd__byte * AXISCALL getElementAsByte(const AxisChar* pName,
00316         const AxisChar* pNamespace);
00317     xsd__unsignedByte * AXISCALL getElementAsUnsignedByte(const AxisChar* pName,
00318         const AxisChar* pNamespace);
00319     xsd__long * AXISCALL getElementAsLong(const AxisChar* pName,
00320         const AxisChar* pNamespace);
00321     xsd__integer * AXISCALL getElementAsInteger(const AxisChar* pName,
00322         const AxisChar* pNamespace);
00323     xsd__unsignedLong * AXISCALL getElementAsUnsignedLong(const AxisChar* pName,
00324         const AxisChar* pNamespace);
00325     xsd__float * AXISCALL getElementAsFloat(const AxisChar* pName,
00326         const AxisChar* pNamespace);
00327     xsd__double * AXISCALL getElementAsDouble(const AxisChar* pName,
00328         const AxisChar* pNamespace);
00329     xsd__decimal * AXISCALL getElementAsDecimal(const AxisChar* pName,
00330         const AxisChar* pNamespace);
00331     xsd__string AXISCALL getElementAsString(const AxisChar* pName,
00332         const AxisChar* pNamespace);
00333     xsd__anyURI AXISCALL getElementAsAnyURI(const AxisChar* pName,
00334         const AxisChar* pNamespace);
00335     xsd__QName AXISCALL getElementAsQName(const AxisChar* pName,
00336         const AxisChar* pNamespace);
00337     xsd__hexBinary * AXISCALL getElementAsHexBinary(const AxisChar* pName,
00338         const AxisChar* pNamespace);
00339     xsd__base64Binary * AXISCALL getElementAsBase64Binary(const AxisChar* pName,
00340         const AxisChar* pNamespace);
00341     xsd__dateTime * AXISCALL getElementAsDateTime(const AxisChar* pName,
00342         const AxisChar* pNamespace);
00343     xsd__date * AXISCALL getElementAsDate(const AxisChar* pName,
00344         const AxisChar* pNamespace);
00345     xsd__time * AXISCALL getElementAsTime(const AxisChar* pName,
00346         const AxisChar* pNamespace);
00347     xsd__duration * AXISCALL getElementAsDuration(const AxisChar* pName,
00348         const AxisChar* pNamespace);
00349 
00350     /* Methods used by stubs to get a deserialized value of a XML attribute
00351      * as basic types
00352      */
00353     xsd__int * AXISCALL getAttributeAsInt(const AxisChar* pName,
00354         const AxisChar* pNamespace);
00355     xsd__boolean * AXISCALL getAttributeAsBoolean(const AxisChar* pName,
00356         const AxisChar* pNamespace);
00357     xsd__unsignedInt * AXISCALL getAttributeAsUnsignedInt(const AxisChar* pName,
00358         const AxisChar* pNamespace);
00359     xsd__short * AXISCALL getAttributeAsShort(const AxisChar* pName,
00360         const AxisChar* pNamespace);
00361     xsd__unsignedShort * AXISCALL getAttributeAsUnsignedShort(const AxisChar* pName,
00362         const AxisChar* pNamespace);
00363     xsd__byte * AXISCALL getAttributeAsByte(const AxisChar* pName,
00364         const AxisChar* pNamespace);
00365     xsd__unsignedByte * AXISCALL getAttributeAsUnsignedByte(const AxisChar* pName,
00366         const AxisChar* pNamespace);
00367     xsd__long * AXISCALL getAttributeAsLong(const AxisChar* pName,
00368         const AxisChar* pNamespace);
00369     xsd__integer * AXISCALL getAttributeAsInteger(const AxisChar* pName,
00370         const AxisChar* pNamespace);
00371     xsd__unsignedLong * AXISCALL getAttributeAsUnsignedLong(const AxisChar* pName,
00372         const AxisChar* pNamespace);
00373     xsd__float * AXISCALL getAttributeAsFloat(const AxisChar* pName,
00374         const AxisChar* pNamespace);
00375     xsd__double * AXISCALL getAttributeAsDouble(const AxisChar* pName,
00376         const AxisChar* pNamespace);
00377     xsd__decimal * AXISCALL getAttributeAsDecimal(const AxisChar* pName,
00378         const AxisChar* pNamespace);
00379     xsd__string AXISCALL getAttributeAsString(const AxisChar* pName,
00380         const AxisChar* pNamespace);
00381     xsd__anyURI AXISCALL getAttributeAsAnyURI(const AxisChar* pName,
00382         const AxisChar* pNamespace);
00383     xsd__QName AXISCALL getAttributeAsQName(const AxisChar* pName,
00384         const AxisChar* pNamespace);
00385     xsd__hexBinary * AXISCALL getAttributeAsHexBinary(const AxisChar* pName,
00386         const AxisChar* pNamespace);
00387     xsd__base64Binary * AXISCALL getAttributeAsBase64Binary(const AxisChar*
00388         pName, const AxisChar* pNamespace);
00389     xsd__dateTime * AXISCALL getAttributeAsDateTime(const AxisChar* pName,
00390         const AxisChar* pNamespace);
00391     xsd__date * AXISCALL getAttributeAsDate(const AxisChar* pName,
00392         const AxisChar* pNamespace);
00393     xsd__time * AXISCALL getAttributeAsTime(const AxisChar* pName,
00394         const AxisChar* pNamespace);
00395     xsd__duration * AXISCALL getAttributeAsDuration(const AxisChar* pName,
00396         const AxisChar* pNamespace);
00397 
00398     /* Method used by stubs to get a deserialized value of complex types */
00399     void* AXISCALL getCmplxObject(void* pDZFunct, void* pCreFunct,
00400         void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
00401     /* Method used by stubs to get a deserialized Array of complex types */
00402     Axis_Array AXISCALL getCmplxArray(void* pDZFunct, void* pCreFunct,
00403         void* pDelFunct, void* pSizeFunct, const AxisChar* pName,
00404         const AxisChar* pNamespace);
00405     /* Method used by stubs to get a deserialized Array of basic types */
00406     Axis_Array AXISCALL getBasicArray(XSDTYPE nType, const AxisChar* pName,
00407         const AxisChar* pNamespace);
00408 
00409     int AXISCALL checkMessage(const AxisChar* pName,
00410         const AxisChar* pNamespace);
00411 
00412     void* AXISCALL checkFault(const AxisChar* pName,
00413         const AxisChar* pNamespace);
00414 
00415     int AXISCALL getStatus();
00416 
00417     SOAPTransport* getTransport() { return m_pTransport; }
00418     SoapSerializer* getSOAPSerializer() { return (SoapSerializer*)m_pIWSSZ; }
00419 
00426     void setProxy(const char* pcProxyHost, unsigned int uiProxyPort);
00427 
00428     AnyType* AXISCALL getAnyObject();
00429     int AXISCALL addAnyObject(AnyType* pAnyObject);
00430 
00441     const AxisChar* AXISCALL getNamespacePrefix(const AxisChar* pNamespace);
00442         
00446         const xsd__string getFaultAsXMLString();
00447 
00448 private:
00449     int openConnection();
00450     void closeConnection();
00451     int makeArray();
00452 
00453 private:
00454     ClientAxisEngine* m_pAxisEngine;
00455 
00456 #ifdef WIN32
00457   #pragma warning (disable : 4251)
00458 #endif
00459         list<void*> m_handlerProperties;
00460 
00461 #ifdef WIN32
00462   #pragma warning (default : 4251)
00463 #endif
00464 
00465     /*
00466        Following are pointers to relevant objects of the ClientAxisEngine
00467        instance. So they do not belong to this object and are not created
00468        or deleted
00469      */
00470     SoapSerializer* m_pIWSSZ;
00471     SoapDeSerializer* m_pIWSDZ;
00472     char* m_pcEndPointUri;
00473     AXIS_PROTOCOL_TYPE m_nTransportType;
00474     /*
00475        Transport object
00476      */
00477     SOAPTransport* m_pTransport;
00478 
00479     /* Minimal error check */
00480     int m_nStatus;
00484     string m_strProxyHost;
00488     unsigned int m_uiProxyPort;
00492     bool m_bUseProxy;
00493 
00497     bool m_bCallInitialized;
00498   
00499     // Samisa m_pchSessionID was misssing and there was a compile error due to this
00500     char* m_pchSessionID;
00501 
00502 };
00503 AXIS_CPP_NAMESPACE_END
00504 
00505 #endif

Generated on Tue May 17 02:30:31 2005 for AxisC++ by doxygen1.2.18