X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Fexceptions.h;h=c04c8702c3022b69c29447d592795fce35a89ed3;hb=d1c1478d26cfd9b87a4deb80c3638dc42e111735;hp=f281470486fb56f72f373da8a6c8546ffc6d0d98;hpb=26a08e6ab6631b2a5f91ac84ead591752434a9bc;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/exceptions.h b/xmltooling/exceptions.h index f281470..c04c870 100644 --- a/xmltooling/exceptions.h +++ b/xmltooling/exceptions.h @@ -1,55 +1,61 @@ -/* - * Copyright 2001-2006 Internet2 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. * - * http://www.apache.org/licenses/LICENSE-2.0 + * UCAID licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the + * License at * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. */ /** - * @file exceptions.h + * @file xmltooling/exceptions.h * - * Exception classes + * Exception classes. */ #ifndef __xmltooling_exceptions_h__ #define __xmltooling_exceptions_h__ +#include + #include #include #include #include -#include /** * Declares a derived exception class * * @param name the exception class + * @param linkage linkage specification for class * @param ns the exception class C++ namespace * @param base the base class * @param desc documentation comment for class */ -#define DECL_XMLTOOLING_EXCEPTION(name,ns,base,desc) \ +#define DECL_XMLTOOLING_EXCEPTION(name,linkage,ns,base,desc) \ XMLTOOLING_DOXYGEN(desc) \ - class XMLTOOL_EXCEPTIONAPI(XMLTOOL_API) name : public base { \ + class linkage name : public base { \ public: \ XMLTOOLING_DOXYGEN(Constructor) \ - name(const char* msg=NULL, const xmltooling::params& p=xmltooling::params()) : base(msg,p) {} \ + name(const char* msg=nullptr, const xmltooling::params& p=xmltooling::params()) : base(msg,p) {} \ XMLTOOLING_DOXYGEN(Constructor) \ name(const char* msg, const xmltooling::namedparams& p) : base(msg,p) {} \ XMLTOOLING_DOXYGEN(Constructor) \ name(const std::string& msg, const xmltooling::params& p=xmltooling::params()) : base(msg,p) {} \ XMLTOOLING_DOXYGEN(Constructor) \ name(const std::string& msg, const xmltooling::namedparams& p) : base(msg,p) {} \ - virtual ~name() {} \ + virtual ~name() throw () {} \ virtual const char* getClassName() const { return #ns"::"#name; } \ void raise() const {throw *this;} \ } @@ -60,7 +66,7 @@ * @param name the exception class name * @param ns the exception class C++ namespace */ -#define DECL_EXCEPTION_FACTORY(name,ns) \ +#define DECL_XMLTOOLING_EXCEPTION_FACTORY(name,ns) \ xmltooling::XMLToolingException* name##Factory() \ { \ return new ns::name(); \ @@ -72,7 +78,7 @@ * @param name the exception class name * @param ns the exception class C++ namespace */ -#define REGISTER_EXCEPTION_FACTORY(name,ns) XMLToolingException::registerFactory(#ns"::"#name,name##Factory) +#define REGISTER_XMLTOOLING_EXCEPTION_FACTORY(name,ns) XMLToolingException::registerFactory(#ns"::"#name,name##Factory) #if defined (_MSC_VER) #pragma warning( push ) @@ -130,20 +136,15 @@ namespace xmltooling { namedparams(int count,...); }; - class XMLTOOL_EXCEPTIONAPI(XMLTOOL_API) XMLToolingException; - - /** A factory function that returns an empty exception object of a given type. */ - typedef XMLToolingException* ExceptionFactory(); - /** * Base exception class, supports parametrized messages and XML serialization. * Parameters are prefixed with a dollar sign ($) and can be positional ($1) * or named ($info). */ - class XMLTOOL_EXCEPTIONAPI(XMLTOOL_API) XMLToolingException + class XMLTOOL_EXCEPTIONAPI(XMLTOOL_API) XMLToolingException : public std::exception { public: - virtual ~XMLToolingException() {} + virtual ~XMLToolingException() throw () {} /** * Constructs an exception using a message and positional parameters. @@ -151,7 +152,7 @@ namespace xmltooling { * @param msg error message * @param p an ordered set of positional parameter strings */ - XMLToolingException(const char* msg=NULL, const params& p=params()); + XMLToolingException(const char* msg=nullptr, const params& p=params()); /** * Constructs an exception using a message and named parameters. @@ -189,7 +190,7 @@ namespace xmltooling { * * @return the processed message */ - const char* what() const {return getMessage();} + const char* what() const throw () {return getMessage();} /** * Sets the error message. @@ -244,7 +245,7 @@ namespace xmltooling { * Returns the parameter property with the designated position (based from one). * * @param index position to access - * @return the parameter property or NULL + * @return the parameter property or nullptr */ const char* getProperty(unsigned int index) const; @@ -252,7 +253,7 @@ namespace xmltooling { * Returns the parameter property with the designated name. * * @param name named parameter to access - * @return the parameter property or NULL + * @return the parameter property or nullptr */ const char* getProperty(const char* name) const; @@ -280,6 +281,14 @@ namespace xmltooling { */ std::string toString() const; + /** + * Returns a set of query string name/value pairs, URL-encoded, representing the + * exception's type, message, and parameters. + * + * @return the query string representation + */ + std::string toQueryString() const; + private: std::string m_msg; mutable std::string m_processedmsg; @@ -310,6 +319,9 @@ namespace xmltooling { */ static XMLToolingException* fromString(const char* s); + /** A factory function that returns an empty exception object of a given type. */ + typedef XMLToolingException* ExceptionFactory(); + /** * Registers a factory to create exceptions of a given class name. * @@ -341,15 +353,19 @@ namespace xmltooling { static ExceptionFactoryMap m_factoryMap; }; - DECL_XMLTOOLING_EXCEPTION(XMLParserException,xmltooling,XMLToolingException,Exceptions related to XML parsing); - DECL_XMLTOOLING_EXCEPTION(XMLObjectException,xmltooling,XMLToolingException,Exceptions in basic object usage); - DECL_XMLTOOLING_EXCEPTION(MarshallingException,xmltooling,XMLToolingException,Exceptions during object marshalling); - DECL_XMLTOOLING_EXCEPTION(UnmarshallingException,xmltooling,XMLToolingException,Exceptions during object unmarshalling); - DECL_XMLTOOLING_EXCEPTION(UnknownElementException,xmltooling,XMLToolingException,Exceptions due to processing of unknown element content); - DECL_XMLTOOLING_EXCEPTION(UnknownAttributeException,xmltooling,XMLToolingException,Exceptions due to processing of unknown attributes); - DECL_XMLTOOLING_EXCEPTION(UnknownExtensionException,xmltooling,XMLToolingException,Exceptions from use of an unrecognized extension/plugin); - DECL_XMLTOOLING_EXCEPTION(ValidationException,xmltooling,XMLToolingException,Exceptions during object validation); - + DECL_XMLTOOLING_EXCEPTION(XMLParserException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions related to XML parsing); + DECL_XMLTOOLING_EXCEPTION(XMLObjectException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions in basic object usage); + DECL_XMLTOOLING_EXCEPTION(MarshallingException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions during object marshalling); + DECL_XMLTOOLING_EXCEPTION(UnmarshallingException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions during object unmarshalling); + DECL_XMLTOOLING_EXCEPTION(UnknownElementException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions due to processing of unknown element content); + DECL_XMLTOOLING_EXCEPTION(UnknownAttributeException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions due to processing of unknown attributes); + DECL_XMLTOOLING_EXCEPTION(UnknownExtensionException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions from use of an unrecognized extension/plugin); + DECL_XMLTOOLING_EXCEPTION(ValidationException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions during object validation); + DECL_XMLTOOLING_EXCEPTION(IOException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions related to physical input/output errors); + +#ifndef XMLTOOLING_NO_XMLSEC + DECL_XMLTOOLING_EXCEPTION(XMLSecurityException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions related to the XML security layer); +#endif }; #if defined (_MSC_VER)