Main Page | Class Hierarchy | Class List | File List | Class 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 Sat Apr 9 15:11:57 2005 for AxisC++ by doxygen 1.3.8