00001
00002
00003 #ifndef BASE_SOAP_SOAPSERIALIZER_H
00004 #define BASE_SOAP_SOAPSERIALIZER_H
00005
00006 #include <map>
00007 #include <vector>
00008 #include <xercesc/dom/DOMDocument.hpp>
00009 #include <xercesc/dom/DOMElement.hpp>
00010 #include <xercesc/dom/DOMImplementation.hpp>
00011 #include <xercesc/dom/DOMNamedNodeMap.hpp>
00012 #include <xercesc/dom/DOMNode.hpp>
00013 #include <xercesc/dom/DOMText.hpp>
00014 #include "libppbase/base/DateTime.h"
00015 #include "SOAPException.h"
00016 #include "SOAPStruct.h"
00017 #include "SOAPTranscoder.h"
00018
00019 namespace base_soap {
00021
00025 class PPBASE_SOAP_EXPORT SOAPSerializer {
00026 public:
00028
00035 static SOAPStruct *add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, SOAPTranscoder *transcoder = NULL);
00036
00038 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, bool value);
00039
00041 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, const base::DateTime &value);
00042
00044 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, double value);
00045
00047 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, int value);
00048
00050 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, unsigned int value);
00051
00053 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, long value);
00054
00056 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, unsigned long value);
00057
00059 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, base::longlong_t value);
00060
00062 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, base::u_longlong_t value);
00063
00065 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, const char *value, SOAPTranscoder *transcoder = NULL);
00066
00068 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, const base::String &value,
00069 SOAPTranscoder *transcoder = NULL);
00070
00072 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const std::vector<base::String> &names, const std::vector<base::String> &values,
00073 SOAPTranscoder *transcoder = NULL);
00074
00076 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, const std::vector<base::String> &names,
00077 const std::vector<base::String> &values, SOAPTranscoder *transcoder = NULL);
00078
00080 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name,
00081 const std::vector<std::pair<base::String, base::String> > &value, bool lower = true, SOAPTranscoder *transcoder = NULL);
00082
00084 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name,
00085 const std::map<base::String, base::String> &value, bool lower = true, SOAPTranscoder *transcoder = NULL);
00086
00088 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name, const std::vector<base::String> &value,
00089 SOAPTranscoder *transcoder = NULL);
00090
00092 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const base::String &name,
00093 const std::vector<std::map<base::String, base::String> > &value, bool lower = true, SOAPTranscoder *transcoder = NULL);
00094
00096 static void add(xercesc::DOMDocument *doc, xercesc::DOMElement *node, const SOAPException &exception);
00097
00099 static xercesc::DOMDocument *createDocument(xercesc::DOMImplementation *impl, const base::String &qname, const base::String &nsuri = "");
00100
00102 static xercesc::DOMElement *createElement(xercesc::DOMDocument *doc, const base::String &name, bool lower = false);
00103
00105 static xercesc::DOMElement *createElementNode(xercesc::DOMDocument *doc, const base::String &name);
00106
00108 static xercesc::DOMText *createTextNode(xercesc::DOMDocument *doc, const char *value, SOAPTranscoder *transcoder = NULL);
00109
00111 static bool deserializeBool(const xercesc::DOMNode *node, const base::String &name, bool *isnull = NULL);
00112
00114 static base::DateTime deserializeDateTime(const xercesc::DOMNode *node, const base::String &name, bool *isnull = NULL);
00115
00117 static double deserializeDouble(const xercesc::DOMNode *node, const base::String &name, bool *isnull = NULL);
00118
00120 static int deserializeInt(const xercesc::DOMNode *node, const base::String &name, bool *isnull = NULL);
00121
00123 static unsigned int deserializeUInt(const xercesc::DOMNode *node, const base::String &name, bool *isnull = NULL);
00124
00126 static long deserializeLong(const xercesc::DOMNode *node, const base::String &name, bool *isnull = NULL);
00127
00129 static unsigned long deserializeULong(const xercesc::DOMNode *node, const base::String &name, bool *isnull = NULL);
00130
00132 static base::longlong_t deserializeLongLong(const xercesc::DOMNode *node, const base::String &name, bool *isnull = NULL);
00133
00135 static base::u_longlong_t deserializeULongLong(const xercesc::DOMNode *node, const base::String &name, bool *isnull = NULL);
00136
00138 static base::String deserializeString(const xercesc::DOMNode *node, bool *isnull = NULL, SOAPTranscoder *transcoder = NULL);
00139
00141 static std::vector<SOAPStruct*> deserializeStructArray(xercesc::DOMDocument *doc, const xercesc::DOMNode *node, const base::String &name,
00142 SOAPTranscoder *transcoder = NULL);
00143
00145 static std::map<base::String, base::String> *deserializeMap(const xercesc::DOMNode *node, const base::String &name, SOAPTranscoder *transcoder = NULL);
00146
00148 static std::vector<std::pair<base::String, base::String> > *deserializeVectorOfPairs(const xercesc::DOMNode *node, const base::String &name,
00149 SOAPTranscoder *transcoder = NULL);
00150
00152 static std::vector<base::String> *deserializeVectorOfStrings(const xercesc::DOMNode *node, const base::String &name,
00153 SOAPTranscoder *transcoder = NULL);
00154
00156 static std::vector<std::map<base::String, base::String> > *deserializeVectorOfMaps(const xercesc::DOMNode *root, const base::String &name,
00157 SOAPTranscoder *transcoder = NULL);
00158
00160 static xercesc::DOMNode *get(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL,
00161 enum xercesc::DOMNode::NodeType type = xercesc::DOMNode::TEXT_NODE);
00162
00164 static bool getBool(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL);
00165
00167 static xercesc::DOMImplementation *getDOMImplementation(const base::String &name);
00168
00170 static base::DateTime getDateTime(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL);
00171
00173 static double getDouble(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL);
00174
00176 static int getInt(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL);
00177
00179 static xercesc::DOMNode *getNamedItem(xercesc::DOMNamedNodeMap *list, const char *name);
00180
00182 static base::String getNodeName(const xercesc::DOMNode *node);
00183
00185 static base::String getNodeValue(const xercesc::DOMNode *node, SOAPTranscoder *transcoder = NULL);
00186
00188 static unsigned int getUInt(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL);
00189
00191 static long getLong(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL);
00192
00194 static unsigned long getULong(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL);
00195
00197 static base::longlong_t getLongLong(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL);
00198
00200 static base::u_longlong_t getULongLong(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL);
00201
00203 static std::map<base::String, base::String> *getMap(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL,
00204 SOAPTranscoder *transcoder = NULL);
00205
00207 static base::String getString(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL, bool *isnull = NULL,
00208 SOAPTranscoder *transcoder = NULL);
00209
00211 static SOAPStruct *getStruct(xercesc::DOMDocument *doc, const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL,
00212 SOAPTranscoder *transcoder = NULL);
00213
00215 static std::vector<SOAPStruct*> getStructArray(xercesc::DOMDocument *doc, const xercesc::DOMNode *node, const base::String &name,
00216 bool *exists = NULL, SOAPTranscoder *transcoder = NULL);
00217
00219 static std::vector<std::pair<base::String, base::String> > *getVectorOfPairs(const xercesc::DOMNode *node, const base::String &name,
00220 bool *exists = NULL, SOAPTranscoder *transcoder = NULL);
00221
00223 static std::vector<base::String> *getVectorOfStrings(const xercesc::DOMNode *node, const base::String &name, bool *exists = NULL,
00224 SOAPTranscoder *transcoder = NULL);
00225
00227 static std::vector<std::map<base::String, base::String> > *getVectorOfMaps(const xercesc::DOMNode *root, const base::String &name, bool *exists = NULL,
00228 SOAPTranscoder *transcoder = NULL);
00229
00231 static void renameNode(xercesc::DOMDocument *doc, xercesc::DOMNode *node, const base::String &qname, const base::String &nsuri = "",
00232 SOAPTranscoder *transcoder = NULL);
00233
00235 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, bool value);
00236
00238 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, const base::DateTime &value);
00239
00241 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, double value);
00242
00244 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, int value);
00245
00247 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, unsigned int value);
00248
00250 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, long value);
00251
00253 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, unsigned long value);
00254
00256 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, base::longlong_t value);
00257
00259 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, base::u_longlong_t value);
00260
00262 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, const char *value, SOAPTranscoder *transcoder = NULL);
00263
00265 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, const base::String &value,
00266 SOAPTranscoder *transcoder = NULL);
00267
00269 static void serialize(xercesc::DOMDocument *doc, xercesc::DOMElement *elem, const std::vector<base::String> &names,
00270 const std::vector<base::String> &values, SOAPTranscoder *transcoder = NULL);
00271
00273 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, const std::vector<base::String> &names,
00274 const std::vector<base::String> &values, SOAPTranscoder *transcoder = NULL);
00275
00277 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name,
00278 const std::vector<std::pair<base::String, base::String> > &value, bool lower, SOAPTranscoder *transcoder = NULL);
00279
00281 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, const std::map<base::String, base::String> &value,
00282 bool lower, SOAPTranscoder *transcoder = NULL);
00283
00285 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, const std::vector<base::String> &value,
00286 SOAPTranscoder *transcoder = NULL);
00287
00289 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name,
00290 const std::vector<std::map<base::String, base::String> > &value, bool lower, SOAPTranscoder *transcoder = NULL);
00291
00293 static xercesc::DOMElement *serialize(xercesc::DOMDocument *doc, const base::String &name, const SOAPException &exception,
00294 SOAPTranscoder *transcoder = NULL);
00295
00297 static void setAttribute(xercesc::DOMElement *elem, const base::String &name, const base::String &value, SOAPTranscoder *transcoder = NULL);
00298
00300 static void setNodeValue(xercesc::DOMNode *node, const base::String &value, SOAPTranscoder *transcoder = NULL);
00301
00303 static base::String toString(const xercesc::DOMNode *node);
00304 };
00305 }
00306
00307 #endif