00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00062
00063 #if !defined(AFX_SOAPSERIALIZER_H__C37229AD_BD54_430D_9619_E4574CF95334__INCLUDED_)
00064 #define AFX_SOAPSERIALIZER_H__C37229AD_BD54_430D_9619_E4574CF95334__INCLUDED_
00065
00066 #include "../common/IWrapperSoapSerializer.h"
00067 #include "../common/IHandlerSoapSerializer.h"
00068 #include "../common/BasicTypeSerializer.h"
00069 #include "../common/AxisTime.h"
00070 #include "../common/Packet.h"
00071 #include "SoapEnvVersions.h"
00072
00073
00074 #define SERIALIZE_BUFFER_SIZE 8192
00075
00076 class SoapEnvelope;
00077 class SoapHeader;
00078 class SoapMethod;
00079 class SoapBody;
00080 class SoapFault;
00081 class HeaderBlock;
00082
00083
00093 class SoapSerializer : public IWrapperSoapSerializer, public IHandlerSoapSerializer
00094 {
00095 private:
00096 int iCounter;
00097 AxisChar cCounter[64];
00098 SoapEnvelope* m_pSoapEnvelope;
00099 int m_iSoapVersion;
00100 char m_cSerializedBuffer[SERIALIZE_BUFFER_SIZE];
00101 int m_iCurrentSerBufferSize;
00102 public:
00103 int createSoapMethod(const AxisChar* sLocalName, const AxisChar* sPrefix, const AxisChar* sURI);
00104
00105 IWrapperSoapSerializer& operator<<(const AxisChar* cSerialized);
00106 const AxisChar* getNewNamespacePrefix();
00107 int setSoapVersion(SOAP_VERSION);
00108 int Init();
00109 int SetOutputStream(const Ax_soapstream* pStream);
00110 int setSoapFault(SoapFault* pSoapFault);
00111 int setSoapMethod(SoapMethod* pSoapMethod);
00112 int setSoapBody(SoapBody* pSoapBody);
00113 int setSoapHeader(SoapHeader* pSoapHeader);
00114 int setSoapEnvelope(SoapEnvelope* pSoapEnvelope);
00115 SoapSerializer();
00116 virtual ~SoapSerializer();
00117
00118 int AddOutputParam(const AxisChar* pchName, int nValue, XSDTYPE type);
00119 int AddOutputParam(const AxisChar* pchName, unsigned int unValue, XSDTYPE type);
00120 int AddOutputParam(const AxisChar* pchName, short sValue, XSDTYPE type);
00121 int AddOutputParam(const AxisChar* pchName, unsigned short usValue, XSDTYPE type);
00122 int AddOutputParam(const AxisChar* pchName, long lValue, XSDTYPE type);
00123 int AddOutputParam(const AxisChar* pchName, unsigned long ulValue, XSDTYPE type);
00124 int AddOutputParam(const AxisChar* pchName, char cValue, XSDTYPE type);
00125 int AddOutputParam(const AxisChar* pchName, unsigned char ucValue, XSDTYPE type);
00126 int AddOutputParam(const AxisChar* pchName, float fValue, XSDTYPE type);
00127 int AddOutputParam(const AxisChar* pchName, double dValue, XSDTYPE type);
00128 int AddOutputParam(const AxisChar* pchName, struct tm tValue, XSDTYPE type);
00129 int AddOutputParam(const AxisChar* pchName, const AxisChar* pStrValue, XSDTYPE type);
00130 int AddOutputParam(const AxisChar* pchName, const string& sStrValue, XSDTYPE type);
00131
00132 int AddOutputParam(const AxisChar* pchName, const Axis_Array* pArray, XSDTYPE nType);
00133
00134 int AddOutputParam(const AxisChar* pchName, const Axis_Array* pArray, void* pSZFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pchTypeName, const AxisChar* pchURI);
00135
00136 int AddOutputParam(const AxisChar* pchName, void* pObject, void* pDZFunct, void* pDelFunct);
00137 int SerializeArray(const Axis_Array* pArray, void* pSZFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pchTypeName, const AxisChar* pchURI, const AxisChar* pchArrayName);
00138 int SerializeArray(const Axis_Array* pArray, XSDTYPE nType, const AxisChar* pchArrayName);
00139
00140 private:
00141 int AddOutputParamHelper(const AxisChar* pchName, XSDTYPE nType, uParamValue Value);
00142 int flushSerializedBuffer();
00143 IArrayBean* makeArrayBean(XSDTYPE nType, void* pArray);
00144 IArrayBean* makeArrayBean(void* pObject, void* pSZFunct, void* pDelFunct, void* pSizeFunct);
00145
00146 public:
00147 int removeSoapHeader();
00148 int setHeaderBlock(HeaderBlock* pHeaderBlock);
00149 IHeaderBlock* createHeaderBlock();
00150
00151 const AxisChar* SerializeBasicType(const AxisChar* sName, const AxisChar* sValue, XSDTYPE type);
00152 const AxisChar* SerializeBasicType(const AxisChar* sName, const string sValue, XSDTYPE type);
00153 const AxisChar* SerializeBasicType(const AxisChar* sName, int nValue, XSDTYPE type);
00154 const AxisChar* SerializeBasicType(const AxisChar* sName, struct tm tValue, XSDTYPE type);
00155 const AxisChar* SerializeBasicType(const AxisChar* sName, unsigned int unValue, XSDTYPE type);
00156 const AxisChar* SerializeBasicType(const AxisChar* sName, short sValue, XSDTYPE type);
00157 const AxisChar* SerializeBasicType(const AxisChar* sName, unsigned short usValue, XSDTYPE type);
00158 const AxisChar* SerializeBasicType(const AxisChar* sName, char cValue, XSDTYPE type);
00159 const AxisChar* SerializeBasicType(const AxisChar* sName, unsigned char ucValue, XSDTYPE type);
00160 const AxisChar* SerializeBasicType(const AxisChar* sName, long lValue, XSDTYPE type);
00161 const AxisChar* SerializeBasicType(const AxisChar* sName, unsigned long ulValue, XSDTYPE type);
00162 const AxisChar* SerializeBasicType(const AxisChar* sName, float fValue, XSDTYPE type);
00163 const AxisChar* SerializeBasicType(const AxisChar* sName, double dValue, XSDTYPE type);
00164
00165 private:
00166 BasicTypeSerializer m_BTSZ;
00167 const Ax_soapstream* m_pOutputStream;
00168 };
00169
00170 #endif // !defined(AFX_SOAPSERIALIZER_H__C37229AD_BD54_430D_9619_E4574CF95334__INCLUDED_)