Revamped binding classes with security policy layer.
[shibboleth/cpp-opensaml.git] / saml / saml2 / core / Assertions.h
index c48a323..ae5018d 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef __saml2_assertions_h__
 #define __saml2_assertions_h__
 
-#include <saml/signature/SignableObject.h>
+#include <saml/RootObject.h>
 #include <saml/util/SAMLConstants.h>
 
 #include <xmltooling/AttributeExtensibleXMLObject.h>
@@ -35,7 +35,7 @@
 #include <xmltooling/util/DateTime.h>
 
 #define DECL_SAML2OBJECTBUILDER(cname) \
-    DECL_XMLOBJECTBUILDER(SAML_API,cname,opensaml::SAMLConstants::SAML20_NS,opensaml::SAMLConstants::SAML20_PREFIX)
+    DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML20_NS,samlconstants::SAML20_PREFIX)
 
 namespace opensaml {
 
@@ -79,7 +79,7 @@ namespace opensaml {
         BEGIN_XMLOBJECT(SAML_API,EncryptedID,EncryptedElementType,SAML 2.0 EncryptedID element);
         END_XMLOBJECT;
 
-        BEGIN_XMLOBJECT(SAML_API,BaseID,xmltooling::XMLObject,SAML 2.0 BaseIDAbstractType abstract type);
+        BEGIN_XMLOBJECT(SAML_API,BaseID,xmltooling::XMLObject,SAML 2.0 BaseID abstract element);
             DECL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER);
             DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
         END_XMLOBJECT;
@@ -306,12 +306,29 @@ namespace opensaml {
             static const XMLCh TYPE_NAME[];
         END_XMLOBJECT;
 
-        BEGIN_XMLOBJECT(SAML_API,Assertion,SignableObject,SAML 2.0 Assertion element);
-            DECL_STRING_ATTRIB(Version,VER);
-            DECL_STRING_ATTRIB(ID,ID);
-            DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
-            DECL_TYPED_CHILD(Issuer);
-            DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
+        /**
+         * SAML 2.0 assertion or protocol message.
+         */
+        class SAML_API RootObject : virtual public opensaml::RootObject
+        {
+        protected:
+            RootObject() {}
+        public:
+            virtual ~RootObject() {}
+            
+            /** Gets the Version attribute. */
+            virtual const XMLCh* getVersion() const=0;
+            
+            /** Gets the Issuer. */
+            virtual Issuer* getIssuer() const=0;
+        };
+
+        BEGIN_XMLOBJECT(SAML_API,Assertion,saml2::RootObject,SAML 2.0 Assertion element);
+            DECL_INHERITED_STRING_ATTRIB(Version,VER);
+            DECL_INHERITED_STRING_ATTRIB(ID,ID);
+            DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
+            DECL_INHERITED_TYPED_CHILD(Issuer);
+            DECL_INHERITED_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
             DECL_TYPED_CHILD(Subject);
             DECL_TYPED_CHILD(Conditions);
             DECL_TYPED_CHILD(Advice);
@@ -370,10 +387,10 @@ namespace opensaml {
             /** Singleton builder. */
             static NameIDType* buildNameIDType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
                 const NameIDTypeBuilder* b = dynamic_cast<const NameIDTypeBuilder*>(
-                    XMLObjectBuilder::getBuilder(xmltooling::QName(SAMLConstants::SAML20_NS,NameIDType::TYPE_NAME))
+                    XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,NameIDType::TYPE_NAME))
                     );
                 if (b) {
-                    xmltooling::QName schemaType(SAMLConstants::SAML20_NS,NameIDType::TYPE_NAME,SAMLConstants::SAML20_PREFIX);
+                    xmltooling::QName schemaType(samlconstants::SAML20_NS,NameIDType::TYPE_NAME,samlconstants::SAML20_PREFIX);
                     return b->buildObject(nsURI, localName, prefix, &schemaType);
                 }
                 throw xmltooling::XMLObjectException("Unable to obtain typed builder for NameIDType.");
@@ -392,10 +409,10 @@ namespace opensaml {
             /** Default builder. */
             virtual KeyInfoConfirmationDataType* buildObject() const {
                 xmltooling::QName schemaType(
-                    SAMLConstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME,SAMLConstants::SAML20_PREFIX
+                    samlconstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME,samlconstants::SAML20_PREFIX
                     );
                 return buildObject(
-                    SAMLConstants::SAML20_NS,KeyInfoConfirmationDataType::LOCAL_NAME,SAMLConstants::SAML20_PREFIX,&schemaType
+                    samlconstants::SAML20_NS,KeyInfoConfirmationDataType::LOCAL_NAME,samlconstants::SAML20_PREFIX,&schemaType
                     );
             }
             /** Builder that allows element/type override. */
@@ -406,7 +423,7 @@ namespace opensaml {
             /** Singleton builder. */
             static KeyInfoConfirmationDataType* buildKeyInfoConfirmationDataType() {
                 const KeyInfoConfirmationDataTypeBuilder* b = dynamic_cast<const KeyInfoConfirmationDataTypeBuilder*>(
-                    XMLObjectBuilder::getBuilder(xmltooling::QName(SAMLConstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME))
+                    XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME))
                     );
                 if (b)
                     return b->buildObject();