X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=blobdiff_plain;f=xmltooling%2Fexceptions.h;h=c04c8702c3022b69c29447d592795fce35a89ed3;hp=55f8208e9733bef324ec009c5fa6d38d07f09143;hb=HEAD;hpb=8c28c26a2cb6adf1e2f56af534b5157a9ec605e0 diff --git a/xmltooling/exceptions.h b/xmltooling/exceptions.h index 55f8208..c04c870 100644 --- a/xmltooling/exceptions.h +++ b/xmltooling/exceptions.h @@ -1,33 +1,38 @@ -/* - * 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 @@ -43,14 +48,14 @@ 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;} \ } @@ -61,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(); \ @@ -73,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 ) @@ -131,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. @@ -152,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. @@ -190,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. @@ -245,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; @@ -253,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; @@ -281,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; @@ -311,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. * @@ -350,9 +361,11 @@ namespace xmltooling { 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(XMLSecurityException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmltooling,XMLToolingException,Exceptions related to the XML security layer); 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)