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 
00035 #ifndef OW_XMLPARSE_EXCEPTION_HPP_INCLUDE_GUARD_
00036 #define OW_XMLPARSE_EXCEPTION_HPP_INCLUDE_GUARD_
00037 #include "OW_config.h"
00038 #include "OW_Exception.hpp"
00039 
00040 namespace OW_NAMESPACE
00041 {
00042 
00043 class OW_XML_API XMLParseException : public Exception
00044 {
00045    public:
00046       enum Code
00047       {
00048          BAD_START_TAG = 1,
00049          BAD_END_TAG,
00050          BAD_ATTRIBUTE_NAME,
00051          EXPECTED_EQUAL_SIGN,
00052          BAD_ATTRIBUTE_VALUE,
00053          MINUS_MINUS_IN_COMMENT,
00054          UNTERMINATED_COMMENT,
00055          UNTERMINATED_CDATA,
00056          UNTERMINATED_DOCTYPE,
00057          TOO_MANY_ATTRIBUTES,
00058          MALFORMED_REFERENCE,
00059          EXPECTED_COMMENT_OR_CDATA,
00060          START_END_MISMATCH,
00061          UNCLOSED_TAGS,
00062          MULTIPLE_ROOTS,
00063          VALIDATION_ERROR,
00064          SEMANTIC_ERROR
00065       };
00066       XMLParseException(
00067             const char* file,
00068             unsigned int line,
00069             Code code,
00070             const char* msg,
00071             unsigned int xmlline = 0);
00072       XMLParseException::Code getCode() const
00073       {
00074          return _code;
00075       }
00076       virtual XMLParseException* clone() const throw();
00077       virtual ~XMLParseException() throw();
00078       virtual const char* type() const;
00079 
00080    private:
00081       Code _code;
00082 };
00083 
00084 #define OW_THROWXML(code, message) throw XMLParseException(__FILE__, __LINE__, (code), (message));
00085 
00086 #define OW_THROWXMLLINE(code, line) throw XMLParseException(__FILE__, __LINE__, (code), 0, (line));
00087 
00088 #define OW_THROWXMLLINEMSG(code, line, message) throw XMLParseException(__FILE__, __LINE__, (code), (message), (line));
00089 
00090 } 
00091 
00092 
00093 #endif
00094 
00095