Generalize exception macro.
[shibboleth/cpp-xmltooling.git] / xmltooling / signature / Signature.h
index bf886fc..82b0c5b 100644 (file)
 #if !defined(__xmltooling_sig_h__) && !defined(XMLTOOLING_NO_XMLSEC)\r
 #define __xmltooling_sig_h__\r
 \r
+#include <xmltooling/exceptions.h>\r
 #include <xmltooling/XMLObjectBuilder.h>\r
 #include <xmltooling/signature/SigningContext.h>\r
 #include <xmltooling/signature/VerifyingContext.h>\r
+#include <xmltooling/util/XMLConstants.h>\r
 \r
-namespace xmltooling {\r
+/**\r
+ * @namespace xmlsignature\r
+ * Public namespace of XML Signature classes\r
+ */\r
+namespace xmlsignature {\r
 \r
     /**\r
      * XMLObject representing XML Digital Signature, version 20020212, Signature element.\r
      * The default signature settings include Exclusive c14n w/o comments, SHA-1 digests,\r
      * and RSA-SHA1 signing. \r
      */\r
-    class XMLTOOL_API Signature : public virtual XMLObject\r
+    class XMLTOOL_API Signature : public virtual xmltooling::XMLObject\r
     {\r
     public:\r
         virtual ~Signature() {}\r
 \r
-        /** Element prefix */\r
-        static const XMLCh PREFIX[];\r
-\r
         /** Element local name */\r
         static const XMLCh LOCAL_NAME[];\r
 \r
@@ -79,28 +82,37 @@ namespace xmltooling {
         Signature() {}\r
     };\r
 \r
-#ifdef XMLTOOLING_DEFINE_CONSTANTS\r
-    const XMLCh Signature::LOCAL_NAME[] = {\r
-        chLatin_S, chLatin_i, chLatin_g, chLatin_n, chLatin_a, chLatin_t, chLatin_u, chLatin_r, chLatin_e, chNull\r
-    }; \r
-    const XMLCh Signature::PREFIX[] = {\r
-        chLatin_d, chLatin_s, chNull\r
-    };\r
-#endif\r
-\r
     /**\r
      * Builder for Signature objects.\r
      */\r
-    class XMLTOOL_API SignatureBuilder : public XMLObjectBuilder\r
+    class XMLTOOL_API SignatureBuilder : public xmltooling::XMLObjectBuilder\r
     {\r
     public:\r
-        virtual ~SignatureBuilder() {}\r
-\r
+        virtual Signature* buildObject(\r
+            const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL\r
+            ) const;\r
+            \r
         /**\r
-         * Default builder.\r
+         * Default builder\r
+         * \r
+         * @return empty Signature object\r
          */\r
-        virtual Signature* buildObject() const=0;\r
+        virtual Signature* buildObject() const;\r
+\r
+        static Signature* newSignature() {\r
+            const SignatureBuilder* b = dynamic_cast<const SignatureBuilder*>(\r
+                xmltooling::XMLObjectBuilder::getBuilder(\r
+                    xmltooling::QName(xmltooling::XMLConstants::XMLSIG_NS,Signature::LOCAL_NAME)\r
+                    )\r
+                );\r
+            if (b)\r
+                return b->buildObject();\r
+            throw xmltooling::XMLObjectException("Unable to obtain typed builder for Signature.");\r
+        }\r
     };\r
+\r
+    DECL_XMLTOOLING_EXCEPTION(SignatureException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmlsignature,xmltooling::XMLToolingException,Exceptions in signature processing);\r
+\r
 };\r
 \r
 #endif /* __xmltooling_sig_h__ */\r