00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #if !defined(_SOAPDESERIALIZER_H____OF_AXIS_INCLUDED_)
00018 #define _SOAPDESERIALIZER_H____OF_AXIS_INCLUDED_
00019
00020 #include "IHandlerSoapDeSerializer.h"
00021 #include "HeaderBlock.h"
00022 #include "XMLParser.h"
00023
00024 class SoapFault;
00025 class SoapMethod;
00026 class SoapBody;
00027 class SoapEnvelope;
00028 class SoapHeader;
00029 class IHeaderBlock;
00030
00031
00032
00033
00034
00035
00036 class SoapDeSerializer : public IHandlerSoapDeSerializer
00037 {
00038 private:
00039 SoapEnvelope* m_pEnv;
00040 SoapHeader* m_pHeader;
00041 XMLParser* m_pParser;
00042
00043 AXIS_BINDING_STYLE m_nStyle;
00044
00045 const AnyElement* m_pCurrNode;
00046 const AnyElement* m_pNode;
00047 SOAP_VERSION m_nSoapVersion;
00048 AxisChar* m_pEndptr;
00049
00050 int m_nStatus;
00051
00052 PROVIDERTYPE m_ProviderType;
00053 char* m_pcFaultDetail;
00054 SOAPTransport* m_pInputStream;
00055
00056 private:
00057 int AXISCALL getArraySize(const AnyElement* pElement);
00058 int getBody();
00059 public:
00060 int init();
00061 int getVersion();
00062 SoapEnvelope* getEnvelope();
00063 int getHeader();
00064 int flushInputStream();
00065 PROVIDERTYPE getCurrentProviderType() { return m_ProviderType;};
00066 void setCurrentProviderType(PROVIDERTYPE nType) { m_ProviderType = nType;};
00067
00068
00069
00070
00071
00072 xsd__hexBinary AXISCALL getBodyAsHexBinary();
00073 xsd__base64Binary AXISCALL getBodyAsBase64Binary();
00074 int AXISCALL setNewSoapBody(AxisChar* pNewSoapBody);
00075 bool isAnyMustUnderstandHeadersLeft();
00076 int getFault();
00077 int AXISCALL checkMessageBody(const AxisChar* pName,
00078 const AxisChar* pNamespace);
00079 void* AXISCALL checkForFault(const AxisChar* pName,
00080 const AxisChar* pNamespace);
00081
00082 HeaderBlock* getHeaderBlock();
00083
00084 int AXISCALL addHeaderBlock(IHeaderBlock* pBlk);
00085
00086 IHeaderBlock* getHeaderBlock(const AxisChar* pName,
00087 const AxisChar* pNamespace);
00088 int setInputStream(SOAPTransport* pInputStream);
00089 SoapDeSerializer();
00090 virtual ~SoapDeSerializer();
00091
00092 Axis_Array AXISCALL getCmplxArray(void* pDZFunct, void* pCreFunct,
00093 void* pDelFunct, void* pSizeFunct, const AxisChar* pName,
00094 const AxisChar* pNamespace);
00095
00096 Axis_Array AXISCALL getBasicArray(XSDTYPE nType, const AxisChar* pName,
00097 const AxisChar* pNamespace);
00098
00099
00100
00101 void* AXISCALL getCmplxObject(void* pDZFunct, void* pCreFunct,
00102 void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
00103
00104 const char* AXISCALL getCmplxFaultObjectName();
00105 void* AXISCALL getCmplxFaultObject(void* pDZFunct, void* pCreFunct,
00106 void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
00107
00108
00109 int AXISCALL getElementAsInt(const AxisChar* pName,
00110 const AxisChar* pNamespace);
00111 int AXISCALL getFaultDetail(char** ppcDetail);
00112 xsd__boolean AXISCALL getElementAsBoolean(const AxisChar* pName,
00113 const AxisChar* pNamespace);
00114 unsigned int AXISCALL getElementAsUnsignedInt(const AxisChar* pName,
00115 const AxisChar* pNamespace);
00116 short AXISCALL getElementAsShort(const AxisChar* pName,
00117 const AxisChar* pNamespace);
00118 unsigned short AXISCALL getElementAsUnsignedShort(const AxisChar* pName,
00119 const AxisChar* pNamespace);
00120 char AXISCALL getElementAsByte(const AxisChar* pName,
00121 const AxisChar* pNamespace);
00122 unsigned char AXISCALL getElementAsUnsignedByte(const AxisChar* pName,
00123 const AxisChar* pNamespace);
00124 long AXISCALL getElementAsLong(const AxisChar* pName,
00125 const AxisChar* pNamespace);
00126 long AXISCALL getElementAsInteger(const AxisChar* pName,
00127 const AxisChar* pNamespace);
00128 unsigned long AXISCALL getElementAsUnsignedLong(const AxisChar* pName,
00129 const AxisChar* pNamespace);
00130 float AXISCALL getElementAsFloat(const AxisChar* pName,
00131 const AxisChar* pNamespace);
00132 double AXISCALL getElementAsDouble(const AxisChar* pName,
00133 const AxisChar* pNamespace);
00134 double AXISCALL getElementAsDecimal(const AxisChar* pName,
00135 const AxisChar* pNamespace);
00136 AxisChar* AXISCALL getElementAsString(const AxisChar* pName,
00137 const AxisChar* pNamespace);
00138 AxisChar* AXISCALL getElementAsAnyURI(const AxisChar* pName,
00139 const AxisChar* pNamespace);
00140 AxisChar* AXISCALL getElementAsQName(const AxisChar* pName,
00141 const AxisChar* pNamespace);
00142 xsd__hexBinary AXISCALL getElementAsHexBinary(const AxisChar* pName,
00143 const AxisChar* pNamespace);
00144 xsd__base64Binary AXISCALL getElementAsBase64Binary(const AxisChar* pName,
00145 const AxisChar* pNamespace);
00146 struct tm AXISCALL getElementAsDateTime(const AxisChar* pName,
00147 const AxisChar* pNamespace);
00148 struct tm AXISCALL getElementAsDate(const AxisChar* pName,
00149 const AxisChar* pNamespace);
00150 struct tm AXISCALL getElementAsTime(const AxisChar* pName,
00151 const AxisChar* pNamespace);
00152 long AXISCALL getElementAsDuration(const AxisChar* pName,
00153 const AxisChar* pNamespace);
00154
00155 int AXISCALL getAttributeAsInt(const AxisChar* pName,
00156 const AxisChar* pNamespace);
00157 xsd__boolean AXISCALL getAttributeAsBoolean(const AxisChar* pName,
00158 const AxisChar* pNamespace);
00159 unsigned int AXISCALL getAttributeAsUnsignedInt(const AxisChar* pName,
00160 const AxisChar* pNamespace);
00161 short AXISCALL getAttributeAsShort(const AxisChar* pName,
00162 const AxisChar* pNamespace);
00163 unsigned short AXISCALL getAttributeAsUnsignedShort(const AxisChar* pName,
00164 const AxisChar* pNamespace);
00165 char AXISCALL getAttributeAsByte(const AxisChar* pName,
00166 const AxisChar* pNamespace);
00167 unsigned char AXISCALL getAttributeAsUnsignedByte(const AxisChar* pName,
00168 const AxisChar* pNamespace);
00169 long AXISCALL getAttributeAsLong(const AxisChar* pName,
00170 const AxisChar* pNamespace);
00171 long AXISCALL getAttributeAsInteger(const AxisChar* pName,
00172 const AxisChar* pNamespace);
00173 unsigned long AXISCALL getAttributeAsUnsignedLong(const AxisChar* pName,
00174 const AxisChar* pNamespace);
00175 float AXISCALL getAttributeAsFloat(const AxisChar* pName,
00176 const AxisChar* pNamespace);
00177 double AXISCALL getAttributeAsDouble(const AxisChar* pName,
00178 const AxisChar* pNamespace);
00179 double AXISCALL getAttributeAsDecimal(const AxisChar* pName,
00180 const AxisChar* pNamespace);
00181 AxisChar* AXISCALL getAttributeAsString(const AxisChar* pName,
00182 const AxisChar* pNamespace);
00183 AxisChar* AXISCALL getAttributeAsAnyURI(const AxisChar* pName,
00184 const AxisChar* pNamespace);
00185 AxisChar* AXISCALL getAttributeAsQName(const AxisChar* pName,
00186 const AxisChar* pNamespace);
00187 xsd__hexBinary AXISCALL getAttributeAsHexBinary(const AxisChar* pName,
00188 const AxisChar* pNamespace);
00189 xsd__base64Binary AXISCALL getAttributeAsBase64Binary
00190 (const AxisChar* pName, const AxisChar* pNamespace);
00191 struct tm AXISCALL getAttributeAsDateTime(const AxisChar* pName,
00192 const AxisChar* pNamespace);
00193 struct tm AXISCALL getAttributeAsDate(const AxisChar* pName,
00194 const AxisChar* pNamespace);
00195 struct tm AXISCALL getAttributeAsTime(const AxisChar* pName,
00196 const AxisChar* pNamespace);
00197 long AXISCALL getAttributeAsDuration(const AxisChar* pName,
00198 const AxisChar* pNamespace);
00199
00200
00201
00202 void setStyle(AXIS_BINDING_STYLE nStyle){ m_nStyle = nStyle;};
00203 AXIS_BINDING_STYLE getStyle(){return m_nStyle;};
00204 XSDTYPE getXSDType(const AnyElement* pElement);
00205 int AXISCALL getStatus(){return m_nStatus;};
00206 AnyType* AXISCALL getAnyObject();
00207 void serializeTag(AxisString& xmlStr, const AnyElement* node, AxisString& nsDecls);
00208
00209 private:
00210 int getElementForAttributes(const AxisChar* pName,
00211 const AxisChar* pNamespace);
00212 xsd__base64Binary decodeFromBase64Binary(const AxisChar* pValue);
00213 xsd__hexBinary decodeFromHexBinary(const AxisChar* pValue);
00214 };
00215
00216 #endif
00217