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
00061 #if !defined(EXCEPTION_HPP)
00062 #define EXCEPTION_HPP
00063
00064 #include <xercesc/util/XMLExceptMsgs.hpp>
00065 #include <xercesc/util/XMLUni.hpp>
00066 #include <xercesc/framework/XMLErrorReporter.hpp>
00067
00068 XERCES_CPP_NAMESPACE_BEGIN
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079 class XMLException
00080 {
00081 public:
00082
00083
00084
00085 virtual ~XMLException();
00086
00087
00088
00089
00090
00091 virtual const XMLCh* getType() const = 0;
00092
00093
00094
00095
00096
00097 XMLExcepts::Codes getCode() const;
00098 const XMLCh* getMessage() const;
00099 const char* getSrcFile() const;
00100 unsigned int getSrcLine() const;
00101 XMLErrorReporter::ErrTypes getErrorType() const;
00102
00103
00104
00105
00106
00107 void setPosition(const char* const file, const unsigned int line);
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 XMLException();
00120 XMLException(const char* const srcFile, const unsigned int srcLine);
00121 XMLException(const XMLException& toCopy);
00122 void operator=(const XMLException& toAssign);
00123
00124
00125
00126
00127 static void reinitMsgMutex();
00128
00129 static void reinitMsgLoader();
00130
00131 protected :
00132
00133
00134
00135 void loadExceptText
00136 (
00137 const XMLExcepts::Codes toLoad
00138 );
00139 void loadExceptText
00140 (
00141 const XMLExcepts::Codes toLoad
00142 , const XMLCh* const text1
00143 , const XMLCh* const text2 = 0
00144 , const XMLCh* const text3 = 0
00145 , const XMLCh* const text4 = 0
00146 );
00147 void loadExceptText
00148 (
00149 const XMLExcepts::Codes toLoad
00150 , const char* const text1
00151 , const char* const text2 = 0
00152 , const char* const text3 = 0
00153 , const char* const text4 = 0
00154 );
00155
00156
00157 private :
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172 XMLExcepts::Codes fCode;
00173 char* fSrcFile;
00174 unsigned int fSrcLine;
00175 XMLCh* fMsg;
00176 };
00177
00178
00179
00180
00181 inline XMLExcepts::Codes XMLException::getCode() const
00182 {
00183 return fCode;
00184 }
00185
00186 inline const XMLCh* XMLException::getMessage() const
00187 {
00188 return fMsg;
00189 }
00190
00191 inline const char* XMLException::getSrcFile() const
00192 {
00193 if (!fSrcFile)
00194 return "";
00195 return fSrcFile;
00196 }
00197
00198 inline unsigned int XMLException::getSrcLine() const
00199 {
00200 return fSrcLine;
00201 }
00202
00203 inline XMLErrorReporter::ErrTypes XMLException::getErrorType() const
00204 {
00205 if ((fCode >= XMLExcepts::W_LowBounds) && (fCode <= XMLExcepts::W_HighBounds))
00206 return XMLErrorReporter::ErrType_Warning;
00207 else if ((fCode >= XMLExcepts::F_LowBounds) && (fCode <= XMLExcepts::F_HighBounds))
00208 return XMLErrorReporter::ErrType_Fatal;
00209 else if ((fCode >= XMLExcepts::E_LowBounds) && (fCode <= XMLExcepts::E_HighBounds))
00210 return XMLErrorReporter::ErrType_Error;
00211 return XMLErrorReporter::ErrTypes_Unknown;
00212 }
00213
00214
00215
00216
00217
00218
00219 #define MakeXMLException(theType, expKeyword) \
00220 class expKeyword theType : public XMLException \
00221 { \
00222 public: \
00223 \
00224 theType(const char* const srcFile \
00225 , const unsigned int srcLine \
00226 , const XMLExcepts::Codes toThrow) : \
00227 XMLException(srcFile, srcLine) \
00228 { \
00229 loadExceptText(toThrow); \
00230 } \
00231 \
00232 theType(const theType& toCopy) : \
00233 \
00234 XMLException(toCopy) \
00235 { \
00236 } \
00237 \
00238 theType(const char* const srcFile \
00239 , const unsigned int srcLine \
00240 , const XMLExcepts::Codes toThrow \
00241 , const XMLCh* const text1 \
00242 , const XMLCh* const text2 = 0 \
00243 , const XMLCh* const text3 = 0 \
00244 , const XMLCh* const text4 = 0) : \
00245 XMLException(srcFile, srcLine) \
00246 { \
00247 loadExceptText(toThrow, text1, text2, text3, text4); \
00248 } \
00249 \
00250 theType(const char* const srcFile \
00251 , const unsigned int srcLine \
00252 , const XMLExcepts::Codes toThrow \
00253 , const char* const text1 \
00254 , const char* const text2 = 0 \
00255 , const char* const text3 = 0 \
00256 , const char* const text4 = 0) : \
00257 XMLException(srcFile, srcLine) \
00258 { \
00259 loadExceptText(toThrow, text1, text2, text3, text4); \
00260 } \
00261 \
00262 virtual ~theType() {} \
00263 \
00264 theType& operator=(const theType& toAssign) \
00265 { \
00266 XMLException::operator=(toAssign); \
00267 return *this; \
00268 } \
00269 \
00270 virtual XMLException* duplicate() const \
00271 { \
00272 return new theType(*this); \
00273 } \
00274 \
00275 virtual const XMLCh* getType() const \
00276 { \
00277 return XMLUni::fg##theType##_Name; \
00278 } \
00279 \
00280 private : \
00281 theType(); \
00282 };
00283
00284
00285
00286
00287
00288
00289
00290
00291 #define ThrowXML(type,code) throw type(__FILE__, __LINE__, code)
00292
00293 #define ThrowXML1(type,code,p1) throw type(__FILE__, __LINE__, code, p1)
00294
00295 #define ThrowXML2(type,code,p1,p2) throw type(__FILE__, __LINE__, code, p1, p2)
00296
00297 #define ThrowXML3(type,code,p1,p2,p3) throw type(__FILE__, __LINE__, code, p1, p2, p3)
00298
00299 #define ThrowXML4(type,code,p1,p2,p3,p4) throw type(__FILE__, __LINE__, code, p1, p2, p3, p4)
00300
00301 XERCES_CPP_NAMESPACE_END
00302
00303 #endif