/*
- * Copyright 2001-2006 Internet2
+ * Copyright 2001-2007 Internet2
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
/**
- * @file Metadata.h
+ * @file saml/saml2/metadata/Metadata.h
*
* XMLObjects representing the SAML 2.0 Metadata schema
*/
#define __saml2_metadata_h__
#include <saml/saml2/core/Assertions.h>
-#include <saml/util/SAMLConstants.h>
-
-#include <xmltooling/AttributeExtensibleXMLObject.h>
-#include <xmltooling/ElementProxy.h>
-#include <xmltooling/SimpleElement.h>
-#include <xmltooling/XMLObjectBuilder.h>
-#include <xmltooling/encryption/Encryption.h>
-#include <xmltooling/signature/KeyInfo.h>
-#include <xmltooling/signature/Signature.h>
-#include <xmltooling/util/DateTime.h>
-#include <xmltooling/validation/ValidatingXMLObject.h>
+#include <xmltooling/util/Predicates.h>
+
+#include <ctime>
#define DECL_SAML2MDOBJECTBUILDER(cname) \
- DECL_XMLOBJECTBUILDER(SAML_API,cname,opensaml::SAMLConstants::SAML20MD_NS,opensaml::SAMLConstants::SAML20MD_PREFIX)
+ DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML20MD_NS,samlconstants::SAML20MD_PREFIX)
namespace opensaml {
/**
- * @namespace saml2md
+ * @namespace opensaml::saml2md
* SAML 2.0 metadata namespace
*/
namespace saml2md {
+ /**
+ * Base class for metadata objects that feature a cacheDuration attribute.
+ */
+ class SAML_API CacheableSAMLObject : public virtual xmltooling::XMLObject
+ {
+ protected:
+ CacheableSAMLObject() {}
+ public:
+ ~CacheableSAMLObject() {}
+ DECL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION);
+ };
+
+ /**
+ * Base class for metadata objects that feature a validUntil attribute.
+ */
+ class SAML_API TimeBoundSAMLObject : public virtual xmltooling::XMLObject
+ {
+ protected:
+ TimeBoundSAMLObject() {}
+ public:
+ ~TimeBoundSAMLObject() {}
+ DECL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL);
+ /** Returns true iff the object is valid at the current time. */
+ bool isValid() const {
+ return time(NULL) <= getValidUntilEpoch();
+ }
+ /** Returns true iff the object is valid at the supplied time. */
+ bool isValid(time_t t) const {
+ return t <= getValidUntilEpoch();
+ }
+ };
+
DECL_XMLOBJECT_SIMPLE(SAML_API,AffiliateMember,ID,SAML 2.0 AffiliateMember element);
DECL_XMLOBJECT_SIMPLE(SAML_API,AttributeProfile,ProfileURI,SAML 2.0 AttributeProfile element);
DECL_XMLOBJECT_SIMPLE(SAML_API,Company,Name,SAML 2.0 Company element);
DECL_XMLOBJECT_SIMPLE(SAML_API,NameIDFormat,Format,SAML 2.0 NameIDFormat element);
DECL_XMLOBJECT_SIMPLE(SAML_API,SurName,Name,SAML 2.0 SurName element);
DECL_XMLOBJECT_SIMPLE(SAML_API,TelephoneNumber,Number,SAML 2.0 TelephoneNumber element);
+
+ DECL_XMLOBJECT_SIMPLE(SAML_API,ActionNamespace,Namespace,SAML 2.0 Metadata Extension ActionNamespace element);
+ DECL_XMLOBJECT_SIMPLE(SAML_API,SourceID,ID,SAML 1.x Metadata Profile SourceID element);
- BEGIN_XMLOBJECT(SAML_API,localizedNameType,xmltooling::SimpleElement,SAML 2.0 localizedNameType type);
+ BEGIN_XMLOBJECT(SAML_API,localizedNameType,xmltooling::XMLObject,SAML 2.0 localizedNameType type);
DECL_STRING_ATTRIB(Lang,LANG);
/** localizedNameType local name */
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
- BEGIN_XMLOBJECT(SAML_API,localizedURIType,xmltooling::SimpleElement,SAML 2.0 localizedURIType type);
+ BEGIN_XMLOBJECT(SAML_API,localizedURIType,xmltooling::XMLObject,SAML 2.0 localizedURIType type);
DECL_STRING_ATTRIB(Lang,LANG);
/** localizedURIType local name */
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,OrganizationName,localizedNameType,SAML 2.0 OrganizationName element);
- DECL_XMLOBJECT_CONTENT(Name);
+ DECL_SIMPLE_CONTENT(Name);
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,OrganizationDisplayName,localizedNameType,SAML 2.0 OrganizationDisplayName element);
- DECL_XMLOBJECT_CONTENT(Name);
+ DECL_SIMPLE_CONTENT(Name);
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,OrganizationURL,localizedURIType,SAML 2.0 OrganizationURL element);
- DECL_XMLOBJECT_CONTENT(URL);
+ DECL_SIMPLE_CONTENT(URL);
END_XMLOBJECT;
- BEGIN_XMLOBJECT(SAML_API,Extensions,xmltooling::ElementProxy,SAML 2.0 Extensions element);
+ BEGIN_XMLOBJECT(SAML_API,Extensions,xmltooling::ElementExtensibleXMLObject,SAML 2.0 Extensions element);
/** ExtensionsType local name */
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
static const XMLCh CONTACT_OTHER[];
END_XMLOBJECT;
- BEGIN_XMLOBJECT(SAML_API,AdditionalMetadataLocation,xmltooling::SimpleElement,SAML 2.0 AdditionalMetadataLocation element);
+ BEGIN_XMLOBJECT(SAML_API,AdditionalMetadataLocation,xmltooling::XMLObject,SAML 2.0 AdditionalMetadataLocation element);
DECL_STRING_ATTRIB(Namespace,NAMESPACE);
- DECL_XMLOBJECT_CONTENT(Location);
+ DECL_SIMPLE_CONTENT(Location);
/** AdditionalMetadataLocationType local name */
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
static const XMLCh KEYTYPE_SIGNING[];
END_XMLOBJECT;
- BEGIN_XMLOBJECT2(SAML_API,RoleDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,SAML 2.0 RoleDescriptor abstract element);
+ BEGIN_XMLOBJECT4(SAML_API,RoleDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,
+ CacheableSAMLObject,TimeBoundSAMLObject,SAML 2.0 RoleDescriptor abstract element);
DECL_STRING_ATTRIB(ID,ID);
- DECL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL);
- DECL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION);
DECL_STRING_ATTRIB(ProtocolSupportEnumeration,PROTOCOLSUPPORTENUMERATION);
+ /** Searches the ProtocolSupportEnumeration attribute for the indicated protocol. */
+ virtual bool hasSupport(const XMLCh* protocol) const=0;
+ /** Adds the indicated protocol to the ProtocolSupportEnumeration attribute. */
+ virtual void addSupport(const XMLCh* protocol)=0;
DECL_STRING_ATTRIB(ErrorURL,ERRORURL);
- DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
DECL_TYPED_CHILD(Extensions);
DECL_TYPED_CHILDREN(KeyDescriptor);
DECL_TYPED_CHILD(Organization);
DECL_TYPED_CHILDREN(ContactPerson);
END_XMLOBJECT;
- BEGIN_XMLOBJECT2(SAML_API,EndpointType,xmltooling::ElementProxy,xmltooling::AttributeExtensibleXMLObject,SAML 2.0 EndpointType type);
+ BEGIN_XMLOBJECT(SAML_API,EndpointType,xmltooling::ElementProxy,SAML 2.0 EndpointType type);
DECL_STRING_ATTRIB(Binding,BINDING);
DECL_STRING_ATTRIB(Location,LOCATION);
DECL_STRING_ATTRIB(ResponseLocation,RESPONSELOCATION);
BEGIN_XMLOBJECT(SAML_API,IndexedEndpointType,EndpointType,SAML 2.0 IndexedEndpointType type);
DECL_INTEGER_ATTRIB(Index,INDEX);
- DECL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT);
+ DECL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,false);
/** IndexedEndpointType local name */
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,IDPSSODescriptor,SSODescriptorType,SAML 2.0 IDPSSODescriptor element);
- DECL_BOOLEAN_ATTRIB(WantAuthnRequestsSigned,WANTAUTHNREQUESTSSIGNED);
+ DECL_BOOLEAN_ATTRIB(WantAuthnRequestsSigned,WANTAUTHNREQUESTSSIGNED,false);
DECL_TYPED_CHILDREN(SingleSignOnService);
DECL_TYPED_CHILDREN(NameIDMappingService);
DECL_TYPED_CHILDREN(AssertionIDRequestService);
DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
/** IDPSSODescriptorType local name */
static const XMLCh TYPE_NAME[];
+ DECL_ELEMENT_QNAME;
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,ServiceName,localizedNameType,SAML 2.0 ServiceName element);
- DECL_XMLOBJECT_CONTENT(Name);
+ DECL_SIMPLE_CONTENT(Name);
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,ServiceDescription,localizedNameType,SAML 2.0 ServiceDescription element);
- DECL_XMLOBJECT_CONTENT(Description);
+ DECL_SIMPLE_CONTENT(Description);
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,RequestedAttribute,saml2::Attribute,SAML 2.0 RequestedAttribute element);
- DECL_BOOLEAN_ATTRIB(isRequired,ISREQUIRED);
+ DECL_BOOLEAN_ATTRIB(isRequired,ISREQUIRED,false);
/** RequestedAttributeType local name */
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,AttributeConsumingService,xmltooling::XMLObject,SAML 2.0 AttributeConsumingService element);
DECL_INTEGER_ATTRIB(Index,INDEX);
- DECL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT);
+ DECL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,false);
DECL_TYPED_CHILDREN(ServiceName);
DECL_TYPED_CHILDREN(ServiceDescription);
DECL_TYPED_CHILDREN(RequestedAttribute);
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,SPSSODescriptor,SSODescriptorType,SAML 2.0 SPSSODescriptor element);
- DECL_BOOLEAN_ATTRIB(AuthnRequestsSigned,AUTHNREQUESTSSIGNED);
- DECL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED);
+ DECL_BOOLEAN_ATTRIB(AuthnRequestsSigned,AUTHNREQUESTSSIGNED,false);
+ DECL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,false);
DECL_TYPED_CHILDREN(AssertionConsumerService);
DECL_TYPED_CHILDREN(AttributeConsumingService);
/** SPSSODescriptorType local name */
static const XMLCh TYPE_NAME[];
+ DECL_ELEMENT_QNAME;
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,AuthnQueryService,EndpointType,SAML 2.0 AuthnQueryService element);
DECL_TYPED_CHILDREN(NameIDFormat);
/** AuthnAuthorityDescriptorType local name */
static const XMLCh TYPE_NAME[];
+ DECL_ELEMENT_QNAME;
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,AuthzService,EndpointType,SAML 2.0 AuthzService element);
DECL_TYPED_CHILDREN(NameIDFormat);
/** PDPDescriptorType local name */
static const XMLCh TYPE_NAME[];
+ DECL_ELEMENT_QNAME;
END_XMLOBJECT;
BEGIN_XMLOBJECT(SAML_API,AttributeService,EndpointType,SAML 2.0 AttributeService element);
DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
/** AttributeAuthorityDescriptorType local name */
static const XMLCh TYPE_NAME[];
+ DECL_ELEMENT_QNAME;
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,QueryDescriptorType,RoleDescriptor,SAML 2.0 QueryDescriptorType abstract type);
+ DECL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,false);
+ DECL_TYPED_CHILDREN(NameIDFormat);
+ /** QueryDescriptorType local name */
+ static const XMLCh TYPE_NAME[];
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,AuthnQueryDescriptorType,QueryDescriptorType,SAML 2.0 AuthnQueryDescriptorType extension type);
+ /** AuthnQueryDescriptorType local name */
+ static const XMLCh TYPE_NAME[];
+ DECL_TYPE_QNAME;
END_XMLOBJECT;
- BEGIN_XMLOBJECT2(SAML_API,AffiliationDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,SAML 2.0 AffiliationDescriptor element);
+ BEGIN_XMLOBJECT(SAML_API,AttributeQueryDescriptorType,QueryDescriptorType,SAML 2.0 AttributeQueryDescriptorType extension type);
+ DECL_TYPED_CHILDREN(AttributeConsumingService);
+ /** AttributeQueryDescriptorType local name */
+ static const XMLCh TYPE_NAME[];
+ DECL_TYPE_QNAME;
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT(SAML_API,AuthzDecisionQueryDescriptorType,QueryDescriptorType,SAML 2.0 AuthzDecisionQueryDescriptorType extension type);
+ DECL_TYPED_CHILDREN(ActionNamespace);
+ /** AuthzDecisionQueryDescriptorType local name */
+ static const XMLCh TYPE_NAME[];
+ DECL_TYPE_QNAME;
+ END_XMLOBJECT;
+
+ BEGIN_XMLOBJECT4(SAML_API,AffiliationDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,
+ CacheableSAMLObject,TimeBoundSAMLObject,SAML 2.0 AffiliationDescriptor element);
DECL_STRING_ATTRIB(ID,ID);
DECL_STRING_ATTRIB(AffiliationOwnerID,AFFILIATIONOWNERID);
- DECL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL);
- DECL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION);
- DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
DECL_TYPED_CHILD(Extensions);
DECL_TYPED_CHILDREN(AffiliateMember);
DECL_TYPED_CHILDREN(KeyDescriptor);
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
- BEGIN_XMLOBJECT2(SAML_API,EntityDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,SAML 2.0 EntityDescriptor element);
+ BEGIN_XMLOBJECT4(SAML_API,EntityDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,
+ CacheableSAMLObject,TimeBoundSAMLObject,SAML 2.0 EntityDescriptor element);
DECL_STRING_ATTRIB(ID,ID);
DECL_STRING_ATTRIB(EntityID,ENTITYID);
- DECL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL);
- DECL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION);
- DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
DECL_TYPED_CHILD(Extensions);
DECL_TYPED_CHILD(AffiliationDescriptor);
DECL_TYPED_CHILDREN(RoleDescriptor);
DECL_TYPED_CHILDREN(AuthnAuthorityDescriptor);
DECL_TYPED_CHILDREN(AttributeAuthorityDescriptor);
DECL_TYPED_CHILDREN(PDPDescriptor);
+ DECL_TYPED_CHILDREN(AuthnQueryDescriptorType);
+ DECL_TYPED_CHILDREN(AttributeQueryDescriptorType);
+ DECL_TYPED_CHILDREN(AuthzDecisionQueryDescriptorType);
+ DECL_TYPED_CHILD(Organization);
+ DECL_TYPED_CHILDREN(ContactPerson);
+ DECL_TYPED_CHILDREN(AdditionalMetadataLocation);
+ /** Finds an arbitrary role type supporting a given protocol. */
+ virtual const RoleDescriptor* getRoleDescriptor(const xmltooling::QName& qname, const XMLCh* protocol) const=0;
/** EntityDescriptorType local name */
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
- BEGIN_XMLOBJECT(SAML_API,EntitiesDescriptor,SignableObject,SAML 2.0 EntitiesDescriptor element);
+ BEGIN_XMLOBJECT3(SAML_API,EntitiesDescriptor,SignableObject,CacheableSAMLObject,
+ TimeBoundSAMLObject,SAML 2.0 EntitiesDescriptor element);
DECL_STRING_ATTRIB(ID,ID);
DECL_STRING_ATTRIB(Name,NAME);
- DECL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL);
- DECL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION);
- DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
DECL_TYPED_CHILD(Extensions);
DECL_TYPED_CHILDREN(EntityDescriptor);
DECL_TYPED_CHILDREN(EntitiesDescriptor);
static const XMLCh TYPE_NAME[];
END_XMLOBJECT;
+ /**
+ * Predicate to test a role for validity and protocol support.
+ */
+ class isValidForProtocol
+ {
+ public:
+ /**
+ * Constructor.
+ *
+ * @param protocol support constant to test for
+ */
+ isValidForProtocol(const XMLCh* protocol) : m_time(time(NULL)), m_protocol(protocol) {
+ }
+
+ /**
+ * Returns true iff the supplied role is valid now and supports the right protocol.
+ *
+ * @param role role to test
+ * @return result of predicate
+ */
+ bool operator()(const RoleDescriptor* role) const {
+ return role ? (role->isValid(m_time) && role->hasSupport(m_protocol)) : false;
+ }
+
+ private:
+ time_t m_time;
+ const XMLCh* m_protocol;
+ };
+
+ /**
+ * Predicate to test a role for type equivalence, validity, and protocol support.
+ */
+ class ofTypeValidForProtocol : public isValidForProtocol, public xmltooling::hasSchemaType
+ {
+ public:
+ /**
+ * Constructor.
+ *
+ * @param q schema type to test for
+ * @param protocol support constant to test for
+ */
+ ofTypeValidForProtocol(const xmltooling::QName& q, const XMLCh* protocol)
+ : isValidForProtocol(protocol), xmltooling::hasSchemaType(q) {
+ }
+
+ /**
+ * Returns true iff the supplied role is of the right type, valid now, and supports the right protocol.
+ *
+ * @param role role to test
+ * @return result of predicate
+ */
+ bool operator()(const RoleDescriptor* role) const {
+ return xmltooling::hasSchemaType::operator()(role) && isValidForProtocol::operator()(role);
+ }
+ };
+
DECL_SAML2MDOBJECTBUILDER(AdditionalMetadataLocation);
DECL_SAML2MDOBJECTBUILDER(AffiliateMember);
DECL_SAML2MDOBJECTBUILDER(AffiliationDescriptor);
DECL_SAML2MDOBJECTBUILDER(SPSSODescriptor);
DECL_SAML2MDOBJECTBUILDER(SurName);
DECL_SAML2MDOBJECTBUILDER(TelephoneNumber);
+
+ DECL_XMLOBJECTBUILDER(SAML_API,ActionNamespace,samlconstants::SAML20MD_QUERY_EXT_NS,samlconstants::SAML20MD_QUERY_EXT_PREFIX);
+ DECL_XMLOBJECTBUILDER(SAML_API,SourceID,samlconstants::SAML1MD_NS,samlconstants::SAML1MD_PREFIX);
/**
* Builder for localizedNameType objects.
public:
virtual ~localizedNameTypeBuilder() {}
/** Builder that allows element/type override. */
+#ifdef HAVE_COVARIANT_RETURNS
virtual localizedNameType* buildObject(
+#else
+ virtual xmltooling::XMLObject* buildObject(
+#endif
const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
) const;
/** Singleton builder. */
static localizedNameType* buildlocalizedNameType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
const localizedNameTypeBuilder* b = dynamic_cast<const localizedNameTypeBuilder*>(
- XMLObjectBuilder::getBuilder(xmltooling::QName(SAMLConstants::SAML20MD_NS,localizedNameType::TYPE_NAME))
+ XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,localizedNameType::TYPE_NAME))
);
if (b) {
- xmltooling::QName schemaType(SAMLConstants::SAML20MD_NS,localizedNameType::TYPE_NAME,SAMLConstants::SAML20MD_PREFIX);
+ xmltooling::QName schemaType(samlconstants::SAML20MD_NS,localizedNameType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
+#ifdef HAVE_COVARIANT_RETURNS
return b->buildObject(nsURI, localName, prefix, &schemaType);
+#else
+ return dynamic_cast<localizedNameType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
+#endif
}
throw xmltooling::XMLObjectException("Unable to obtain typed builder for localizedNameType.");
}
public:
virtual ~localizedURITypeBuilder() {}
/** Builder that allows element/type override. */
+#ifdef HAVE_COVARIANT_RETURNS
virtual localizedURIType* buildObject(
+#else
+ virtual xmltooling::XMLObject* buildObject(
+#endif
const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
) const;
/** Singleton builder. */
static localizedURIType* buildlocalizedURIType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
const localizedURITypeBuilder* b = dynamic_cast<const localizedURITypeBuilder*>(
- XMLObjectBuilder::getBuilder(xmltooling::QName(SAMLConstants::SAML20MD_NS,localizedURIType::TYPE_NAME))
+ XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,localizedURIType::TYPE_NAME))
);
if (b) {
- xmltooling::QName schemaType(SAMLConstants::SAML20MD_NS,localizedURIType::TYPE_NAME,SAMLConstants::SAML20MD_PREFIX);
+ xmltooling::QName schemaType(samlconstants::SAML20MD_NS,localizedURIType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
+#ifdef HAVE_COVARIANT_RETURNS
return b->buildObject(nsURI, localName, prefix, &schemaType);
+#else
+ return dynamic_cast<localizedURIType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
+#endif
}
throw xmltooling::XMLObjectException("Unable to obtain typed builder for localizedURIType.");
}
public:
virtual ~EndpointTypeBuilder() {}
/** Builder that allows element/type override. */
+#ifdef HAVE_COVARIANT_RETURNS
virtual EndpointType* buildObject(
+#else
+ virtual xmltooling::XMLObject* buildObject(
+#endif
const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
) const;
/** Singleton builder. */
static EndpointType* buildEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
const EndpointTypeBuilder* b = dynamic_cast<const EndpointTypeBuilder*>(
- XMLObjectBuilder::getBuilder(xmltooling::QName(SAMLConstants::SAML20MD_NS,EndpointType::TYPE_NAME))
+ XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,EndpointType::TYPE_NAME))
);
if (b) {
- xmltooling::QName schemaType(SAMLConstants::SAML20MD_NS,EndpointType::TYPE_NAME,SAMLConstants::SAML20MD_PREFIX);
+ xmltooling::QName schemaType(samlconstants::SAML20MD_NS,EndpointType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
+#ifdef HAVE_COVARIANT_RETURNS
return b->buildObject(nsURI, localName, prefix, &schemaType);
+#else
+ return dynamic_cast<EndpointType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
+#endif
}
throw xmltooling::XMLObjectException("Unable to obtain typed builder for EndpointType.");
}
public:
virtual ~IndexedEndpointTypeBuilder() {}
/** Builder that allows element/type override. */
+#ifdef HAVE_COVARIANT_RETURNS
virtual IndexedEndpointType* buildObject(
+#else
+ virtual xmltooling::XMLObject* buildObject(
+#endif
const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
) const;
/** Singleton builder. */
static IndexedEndpointType* buildIndexedEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
const IndexedEndpointTypeBuilder* b = dynamic_cast<const IndexedEndpointTypeBuilder*>(
- XMLObjectBuilder::getBuilder(xmltooling::QName(SAMLConstants::SAML20MD_NS,IndexedEndpointType::TYPE_NAME))
+ XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,IndexedEndpointType::TYPE_NAME))
);
if (b) {
- xmltooling::QName schemaType(SAMLConstants::SAML20MD_NS,IndexedEndpointType::TYPE_NAME,SAMLConstants::SAML20MD_PREFIX);
+ xmltooling::QName schemaType(samlconstants::SAML20MD_NS,IndexedEndpointType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
+#ifdef HAVE_COVARIANT_RETURNS
return b->buildObject(nsURI, localName, prefix, &schemaType);
+#else
+ return dynamic_cast<IndexedEndpointType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
+#endif
}
throw xmltooling::XMLObjectException("Unable to obtain typed builder for IndexedEndpointType.");
}
};
/**
- * Registers builders and validators for SAML 2.0 Metadata classes into the runtime.
+ * Builder for AuthnQueryDescriptorType objects.
+ *
+ * This is customized to return a RoleDescriptor element with an
+ * xsi:type of AuthnQueryDescriptorType.
*/
- void SAML_API registerMetadataClasses();
+ class SAML_API AuthnQueryDescriptorTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
+ public:
+ virtual ~AuthnQueryDescriptorTypeBuilder() {}
+ /** Default builder. */
+#ifdef HAVE_COVARIANT_RETURNS
+ virtual AuthnQueryDescriptorType* buildObject() const {
+#else
+ virtual xmltooling::XMLObject* buildObject() const {
+#endif
+ xmltooling::QName schemaType(
+ samlconstants::SAML20MD_QUERY_EXT_NS,AuthnQueryDescriptorType::TYPE_NAME,samlconstants::SAML20MD_QUERY_EXT_PREFIX
+ );
+ return buildObject(
+ samlconstants::SAML20MD_NS,AuthnQueryDescriptorType::LOCAL_NAME,samlconstants::SAML20MD_PREFIX,&schemaType
+ );
+ }
+ /** Builder that allows element/type override. */
+#ifdef HAVE_COVARIANT_RETURNS
+ virtual AuthnQueryDescriptorType* buildObject(
+#else
+ virtual xmltooling::XMLObject* buildObject(
+#endif
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ ) const;
+
+ /** Singleton builder. */
+ static AuthnQueryDescriptorType* buildAuthnQueryDescriptorType() {
+ const AuthnQueryDescriptorTypeBuilder* b = dynamic_cast<const AuthnQueryDescriptorTypeBuilder*>(
+ XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_QUERY_EXT_NS,AuthnQueryDescriptorType::TYPE_NAME))
+ );
+ if (b) {
+#ifdef HAVE_COVARIANT_RETURNS
+ return b->buildObject();
+#else
+ return dynamic_cast<AuthnQueryDescriptorType*>(b->buildObject());
+#endif
+ }
+ throw xmltooling::XMLObjectException("Unable to obtain typed builder for AuthnQueryDescriptorType.");
+ }
+ };
/**
- * Validator suite for SAML 2.0 Metadata schema validation.
+ * Builder for AttributeQueryDescriptorType objects.
+ *
+ * This is customized to return a RoleDescriptor element with an
+ * xsi:type of AttributeQueryDescriptorType.
*/
- extern SAML_API xmltooling::ValidatorSuite MetadataSchemaValidators;
+ class SAML_API AttributeQueryDescriptorTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
+ public:
+ virtual ~AttributeQueryDescriptorTypeBuilder() {}
+ /** Default builder. */
+#ifdef HAVE_COVARIANT_RETURNS
+ virtual AttributeQueryDescriptorType* buildObject() const {
+#else
+ virtual xmltooling::XMLObject* buildObject() const {
+#endif
+ xmltooling::QName schemaType(
+ samlconstants::SAML20MD_QUERY_EXT_NS,AttributeQueryDescriptorType::TYPE_NAME,samlconstants::SAML20MD_QUERY_EXT_PREFIX
+ );
+ return buildObject(
+ samlconstants::SAML20MD_NS,AttributeQueryDescriptorType::LOCAL_NAME,samlconstants::SAML20MD_PREFIX,&schemaType
+ );
+ }
+ /** Builder that allows element/type override. */
+#ifdef HAVE_COVARIANT_RETURNS
+ virtual AttributeQueryDescriptorType* buildObject(
+#else
+ virtual xmltooling::XMLObject* buildObject(
+#endif
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ ) const;
+
+ /** Singleton builder. */
+ static AttributeQueryDescriptorType* buildAttributeQueryDescriptorType() {
+ const AttributeQueryDescriptorTypeBuilder* b = dynamic_cast<const AttributeQueryDescriptorTypeBuilder*>(
+ XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_QUERY_EXT_NS,AttributeQueryDescriptorType::TYPE_NAME))
+ );
+ if (b) {
+#ifdef HAVE_COVARIANT_RETURNS
+ return b->buildObject();
+#else
+ return dynamic_cast<AttributeQueryDescriptorType*>(b->buildObject());
+#endif
+ }
+ throw xmltooling::XMLObjectException("Unable to obtain typed builder for AttributeQueryDescriptorType.");
+ }
+ };
+
+ /**
+ * Builder for AuthzDecisionQueryDescriptorType objects.
+ *
+ * This is customized to return a RoleDescriptor element with an
+ * xsi:type of AuthzDecisionQueryDescriptorType.
+ */
+ class SAML_API AuthzDecisionQueryDescriptorTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
+ public:
+ virtual ~AuthzDecisionQueryDescriptorTypeBuilder() {}
+ /** Default builder. */
+#ifdef HAVE_COVARIANT_RETURNS
+ virtual AuthzDecisionQueryDescriptorType* buildObject() const {
+#else
+ virtual xmltooling::XMLObject* buildObject() const {
+#endif
+ xmltooling::QName schemaType(
+ samlconstants::SAML20MD_QUERY_EXT_NS,AuthzDecisionQueryDescriptorType::TYPE_NAME,samlconstants::SAML20MD_QUERY_EXT_PREFIX
+ );
+ return buildObject(
+ samlconstants::SAML20MD_NS,AuthzDecisionQueryDescriptorType::LOCAL_NAME,samlconstants::SAML20MD_PREFIX,&schemaType
+ );
+ }
+ /** Builder that allows element/type override. */
+#ifdef HAVE_COVARIANT_RETURNS
+ virtual AuthzDecisionQueryDescriptorType* buildObject(
+#else
+ virtual xmltooling::XMLObject* buildObject(
+#endif
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+ ) const;
+
+ /** Singleton builder. */
+ static AuthzDecisionQueryDescriptorType* buildAuthzDecisionQueryDescriptorType() {
+ const AuthzDecisionQueryDescriptorTypeBuilder* b = dynamic_cast<const AuthzDecisionQueryDescriptorTypeBuilder*>(
+ XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_QUERY_EXT_NS,AuthzDecisionQueryDescriptorType::TYPE_NAME))
+ );
+ if (b) {
+#ifdef HAVE_COVARIANT_RETURNS
+ return b->buildObject();
+#else
+ return dynamic_cast<AuthzDecisionQueryDescriptorType*>(b->buildObject());
+#endif
+ }
+ throw xmltooling::XMLObjectException("Unable to obtain typed builder for AuthzDecisionQueryDescriptorType.");
+ }
+ };
+
+ /**
+ * Registers builders and validators for SAML 2.0 Metadata classes into the runtime.
+ */
+ void SAML_API registerMetadataClasses();
};
};