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

Call.hpp

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

Generated on Thu Dec 16 19:43:11 2004 for AxisC++ by doxygen1.2.18