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 #ifdef WIN32
00060 #pragma warning (disable : 4786)
00061 #endif
00062
00063 #if !defined(__XMLSTREAMHANDLER_H_INCLUDED__)
00064 #define __XMLSTREAMHANDLER_H_INCLUDED__
00065
00066 #include <xercesc/sax2/DefaultHandler.hpp>
00067 #include <xercesc/sax2/SAX2XMLReader.hpp>
00068 #include <xercesc/sax2/XMLReaderFactory.hpp>
00069 #include <xercesc/util/PlatformUtils.hpp>
00070 #include <xercesc/framework/MemBufInputSource.hpp>
00071
00072 #include "../common/Param.h"
00073 #include "../common/ArrayBean.h"
00074 #include "SoapEnvelope.h"
00075 #include "SoapHeader.h"
00076 #include "SoapMethod.h"
00077 #include "SoapBody.h"
00078 #include "SoapFault.h"
00079 #include "../common/GDefine.h"
00080 #include "SoapKeywordMapping.h"
00081
00082 #define TRANSCODE_BUFFER_SIZE 256
00083
00084 #include <map>
00085 #include <list>
00086 #include <string>
00087
00088 using namespace std;
00089
00090
00091
00092 XERCES_CPP_NAMESPACE_USE
00093
00094 enum SOAP_PARSE_LEVEL { SOAP_UNKNOWN=1, SOAP_ENVELOP, SOAP_HEADER, SOAP_FAULT, SOAP_BODY, SOAP_METHOD, SOAP_PARAM, SOAP_HEADER_BLOCK};
00095
00096
00104 class XMLStreamHandler:public DefaultHandler
00105 {
00106 friend class SoapDeSerializer;
00107 private:
00108 SoapEnvelope* m_pEnv;
00109 SoapHeader* m_pHead;
00110 SoapBody* m_pBody;
00111 SoapFault* m_pFault;
00112 SoapMethod* m_pMethod;
00113
00114 list<Param*> m_Params;
00115 list<Param*>::iterator m_it;
00116 map<AxisXMLString, AxisXMLString> m_NsStack;
00117 SOAP_VERSION m_nSoapVersion;
00118 AxisChar m_Buffer[TRANSCODE_BUFFER_SIZE];
00119 private:
00120 Param* GetParam();
00121 int Success();
00122 Param m_Param;
00123 ArrayBean m_ArrayBean;
00124 ComplexObjectHandler m_CplxObj;
00125 int m_Success;
00126 SOAP_PARSE_LEVEL m_PL0;
00127 SOAP_PARSE_LEVEL m_PL1;
00128 SOAP_PARSE_LEVEL m_PL2;
00129 AxisXMLString m_sLastElement;
00130 HeaderBlock* m_pHeaderBlock;
00131 private:
00132 const AxisChar* __XTRC(const XMLCh* pChar);
00133 void createHeaderBlock(const XMLCh *const uri,const XMLCh *const localname,const XMLCh *const qname,const Attributes &attrs);
00134 int m_nParamNestingLevel;
00135 int SetArrayDimensions(AxisXMLString& sDimensions);
00136 void FillMethod(const XMLCh *const uri,const XMLCh *const localname,const XMLCh *const qname,const Attributes &attrs);
00137 void FillFault(const XMLCh *const uri,const XMLCh *const localname,const XMLCh *const qname,const Attributes &attrs);
00138 void FillHeader(const XMLCh *const uri,const XMLCh *const localname,const XMLCh *const qname,const Attributes &attrs);
00139 void FillBody(const XMLCh *const uri,const XMLCh *const localname,const XMLCh *const qname,const Attributes &attrs);
00140 void FillEnvelope(const XMLCh *const uri,const XMLCh *const localname,const XMLCh *const qname,const Attributes &attrs);
00141 void Init();
00142 XMLStreamHandler();
00143 ~XMLStreamHandler();
00144
00145
00146
00147
00148
00149 void startElement(const XMLCh *const uri,const XMLCh *const localname,const XMLCh *const qname,const Attributes &attrs);
00150 void characters (const XMLCh *const chars,const unsigned int length);
00151 void endElement (const XMLCh *const uri,const XMLCh *const localname,const XMLCh *const qname);
00152 void startPrefixMapping(const XMLCh* const prefix, const XMLCh* const uri);
00153 void endPrefixMapping(const XMLCh* const prefix);
00154
00155
00156
00157
00158 void warning(const SAXParseException& exception);
00159 void error(const SAXParseException& exception);
00160 void fatalError(const SAXParseException& exception);
00161 void SetParamType(const Attributes &attrs);
00162 };
00163
00164 #endif