2 * Copyright 2001-2010 Internet2
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * @file saml/saml2/metadata/Metadata.h
20 * XMLObjects representing the SAML 2.0 Metadata schema.
23 #ifndef __saml2_metadata_h__
24 #define __saml2_metadata_h__
26 #include <saml/saml2/core/Assertions.h>
29 #include <xercesc/util/XMLUniDefs.hpp>
30 #include <xmltooling/util/Predicates.h>
33 #define DECL_SAML2MDOBJECTBUILDER(cname) \
34 DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML20MD_NS,samlconstants::SAML20MD_PREFIX)
36 namespace xmlencryption {
37 class XMLTOOL_API EncryptionMethod;
43 * @namespace opensaml::saml2md
44 * SAML 2.0 metadata namespace
49 * Base class for metadata objects that feature a cacheDuration attribute.
51 class SAML_API CacheableSAMLObject : public virtual xmltooling::XMLObject
54 CacheableSAMLObject() {}
56 ~CacheableSAMLObject() {}
57 DECL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION);
61 * Base class for metadata objects that feature a validUntil attribute.
63 class SAML_API TimeBoundSAMLObject : public virtual xmltooling::XMLObject
66 TimeBoundSAMLObject() {}
68 ~TimeBoundSAMLObject() {}
69 DECL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL);
70 /** Returns true iff the object is valid at the current time. */
71 bool isValid() const {
72 return time(nullptr) <= getValidUntilEpoch();
74 /** Returns true iff the object is valid at the supplied time. */
75 bool isValid(time_t t) const {
76 return t <= getValidUntilEpoch();
80 DECL_XMLOBJECT_SIMPLE(SAML_API,AffiliateMember,ID,SAML 2.0 AffiliateMember element);
81 DECL_XMLOBJECT_SIMPLE(SAML_API,AttributeProfile,ProfileURI,SAML 2.0 AttributeProfile element);
82 DECL_XMLOBJECT_SIMPLE(SAML_API,Company,Name,SAML 2.0 Company element);
83 DECL_XMLOBJECT_SIMPLE(SAML_API,EmailAddress,Address,SAML 2.0 EmailAddress element);
84 DECL_XMLOBJECT_SIMPLE(SAML_API,GivenName,Name,SAML 2.0 GivenName element);
85 DECL_XMLOBJECT_SIMPLE(SAML_API,NameIDFormat,Format,SAML 2.0 NameIDFormat element);
86 DECL_XMLOBJECT_SIMPLE(SAML_API,SurName,Name,SAML 2.0 SurName element);
87 DECL_XMLOBJECT_SIMPLE(SAML_API,TelephoneNumber,Number,SAML 2.0 TelephoneNumber element);
89 DECL_XMLOBJECT_SIMPLE(SAML_API,ActionNamespace,Namespace,SAML 2.0 Metadata Extension ActionNamespace element);
90 DECL_XMLOBJECT_SIMPLE(SAML_API,SourceID,ID,SAML 1.x Metadata Profile SourceID element);
92 BEGIN_XMLOBJECT(SAML_API,localizedNameType,xmltooling::XMLObject,SAML 2.0 localizedNameType type);
93 DECL_STRING_ATTRIB(Lang,LANG);
94 /** localizedNameType local name */
95 static const XMLCh TYPE_NAME[];
98 BEGIN_XMLOBJECT(SAML_API,localizedURIType,xmltooling::XMLObject,SAML 2.0 localizedURIType type);
99 DECL_STRING_ATTRIB(Lang,LANG);
100 /** localizedURIType local name */
101 static const XMLCh TYPE_NAME[];
104 BEGIN_XMLOBJECT(SAML_API,OrganizationName,localizedNameType,SAML 2.0 OrganizationName element);
105 DECL_SIMPLE_CONTENT(Name);
108 BEGIN_XMLOBJECT(SAML_API,OrganizationDisplayName,localizedNameType,SAML 2.0 OrganizationDisplayName element);
109 DECL_SIMPLE_CONTENT(Name);
112 BEGIN_XMLOBJECT(SAML_API,OrganizationURL,localizedURIType,SAML 2.0 OrganizationURL element);
113 DECL_SIMPLE_CONTENT(URL);
116 BEGIN_XMLOBJECT(SAML_API,Extensions,xmltooling::ElementExtensibleXMLObject,SAML 2.0 Extensions element);
117 /** ExtensionsType local name */
118 static const XMLCh TYPE_NAME[];
121 BEGIN_XMLOBJECT(SAML_API,Organization,xmltooling::AttributeExtensibleXMLObject,SAML 2.0 Organization element);
122 DECL_TYPED_CHILD(Extensions);
123 DECL_TYPED_CHILDREN(OrganizationName);
124 DECL_TYPED_CHILDREN(OrganizationDisplayName);
125 DECL_TYPED_CHILDREN(OrganizationURL);
126 /** OrganizationType local name */
127 static const XMLCh TYPE_NAME[];
130 BEGIN_XMLOBJECT(SAML_API,ContactPerson,xmltooling::AttributeExtensibleXMLObject,SAML 2.0 ContactPerson element);
131 DECL_STRING_ATTRIB(ContactType,CONTACTTYPE);
132 DECL_TYPED_CHILD(Extensions);
133 DECL_TYPED_CHILD(Company);
134 DECL_TYPED_CHILD(GivenName);
135 DECL_TYPED_CHILD(SurName);
136 DECL_TYPED_CHILDREN(EmailAddress);
137 DECL_TYPED_CHILDREN(TelephoneNumber);
138 /** ContactType local name */
139 static const XMLCh TYPE_NAME[];
140 /** technical Contact Type */
141 static const XMLCh CONTACT_TECHNICAL[];
142 /** support Contact Type */
143 static const XMLCh CONTACT_SUPPORT[];
144 /** administrative Contact Type */
145 static const XMLCh CONTACT_ADMINISTRATIVE[];
146 /** billing Contact Type */
147 static const XMLCh CONTACT_BILLING[];
148 /** other Contact Type */
149 static const XMLCh CONTACT_OTHER[];
152 BEGIN_XMLOBJECT(SAML_API,AdditionalMetadataLocation,xmltooling::XMLObject,SAML 2.0 AdditionalMetadataLocation element);
153 DECL_STRING_ATTRIB(Namespace,NAMESPACE);
154 DECL_SIMPLE_CONTENT(Location);
155 /** AdditionalMetadataLocationType local name */
156 static const XMLCh TYPE_NAME[];
159 BEGIN_XMLOBJECT(SAML_API,KeyDescriptor,xmltooling::XMLObject,SAML 2.0 KeyDescriptor element);
160 DECL_STRING_ATTRIB(Use,USE);
161 DECL_TYPED_FOREIGN_CHILD(KeyInfo,xmlsignature);
162 DECL_TYPED_FOREIGN_CHILDREN(EncryptionMethod,xmlencryption);
163 /** KeyDescriptorType local name */
164 static const XMLCh TYPE_NAME[];
165 /** encryption Key Type */
166 static const XMLCh KEYTYPE_ENCRYPTION[];
167 /** signing Key Type */
168 static const XMLCh KEYTYPE_SIGNING[];
171 BEGIN_XMLOBJECT4(SAML_API,RoleDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,
172 CacheableSAMLObject,TimeBoundSAMLObject,SAML 2.0 RoleDescriptor abstract element);
173 DECL_STRING_ATTRIB(ID,ID);
174 DECL_STRING_ATTRIB(ProtocolSupportEnumeration,PROTOCOLSUPPORTENUMERATION);
175 /** Searches the ProtocolSupportEnumeration attribute for the indicated protocol. */
176 virtual bool hasSupport(const XMLCh* protocol) const=0;
177 /** Adds the indicated protocol to the ProtocolSupportEnumeration attribute. */
178 virtual void addSupport(const XMLCh* protocol)=0;
179 DECL_STRING_ATTRIB(ErrorURL,ERRORURL);
180 DECL_TYPED_CHILD(Extensions);
181 DECL_TYPED_CHILDREN(KeyDescriptor);
182 DECL_TYPED_CHILD(Organization);
183 DECL_TYPED_CHILDREN(ContactPerson);
186 BEGIN_XMLOBJECT2(SAML_API,RoleDescriptorType,RoleDescriptor,xmltooling::ElementExtensibleXMLObject,SAML 2.0 RoleDescriptor extension);
189 BEGIN_XMLOBJECT(SAML_API,EndpointType,xmltooling::ElementProxy,SAML 2.0 EndpointType type);
190 DECL_STRING_ATTRIB(Binding,BINDING);
191 DECL_STRING_ATTRIB(Location,LOCATION);
192 DECL_STRING_ATTRIB(ResponseLocation,RESPONSELOCATION);
193 /** EndpointType local name */
194 static const XMLCh TYPE_NAME[];
197 BEGIN_XMLOBJECT(SAML_API,IndexedEndpointType,EndpointType,SAML 2.0 IndexedEndpointType type);
198 DECL_INTEGER_ATTRIB(Index,INDEX);
199 DECL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,false);
200 /** IndexedEndpointType local name */
201 static const XMLCh TYPE_NAME[];
204 BEGIN_XMLOBJECT(SAML_API,ArtifactResolutionService,IndexedEndpointType,SAML 2.0 ArtifactResolutionService element);
207 BEGIN_XMLOBJECT(SAML_API,SingleLogoutService,EndpointType,SAML 2.0 SingleLogoutService element);
210 BEGIN_XMLOBJECT(SAML_API,ManageNameIDService,EndpointType,SAML 2.0 ManageNameIDService element);
213 BEGIN_XMLOBJECT(SAML_API,SSODescriptorType,RoleDescriptor,SAML 2.0 SSODescriptorType abstract type);
214 DECL_TYPED_CHILDREN(ArtifactResolutionService);
215 DECL_TYPED_CHILDREN(SingleLogoutService);
216 DECL_TYPED_CHILDREN(ManageNameIDService);
217 DECL_TYPED_CHILDREN(NameIDFormat);
218 /** SSODescriptorType local name */
219 static const XMLCh TYPE_NAME[];
222 BEGIN_XMLOBJECT(SAML_API,SingleSignOnService,EndpointType,SAML 2.0 SingleSignOnService element);
225 BEGIN_XMLOBJECT(SAML_API,NameIDMappingService,EndpointType,SAML 2.0 NameIDMappingService element);
228 BEGIN_XMLOBJECT(SAML_API,AssertionIDRequestService,EndpointType,SAML 2.0 AssertionIDRequestService element);
231 BEGIN_XMLOBJECT(SAML_API,IDPSSODescriptor,SSODescriptorType,SAML 2.0 IDPSSODescriptor element);
232 DECL_BOOLEAN_ATTRIB(WantAuthnRequestsSigned,WANTAUTHNREQUESTSSIGNED,false);
233 DECL_TYPED_CHILDREN(SingleSignOnService);
234 DECL_TYPED_CHILDREN(NameIDMappingService);
235 DECL_TYPED_CHILDREN(AssertionIDRequestService);
236 DECL_TYPED_CHILDREN(AttributeProfile);
237 DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
238 /** IDPSSODescriptorType local name */
239 static const XMLCh TYPE_NAME[];
243 BEGIN_XMLOBJECT(SAML_API,ServiceName,localizedNameType,SAML 2.0 ServiceName element);
244 DECL_SIMPLE_CONTENT(Name);
247 BEGIN_XMLOBJECT(SAML_API,ServiceDescription,localizedNameType,SAML 2.0 ServiceDescription element);
248 DECL_SIMPLE_CONTENT(Description);
251 BEGIN_XMLOBJECT(SAML_API,RequestedAttribute,saml2::Attribute,SAML 2.0 RequestedAttribute element);
252 DECL_BOOLEAN_ATTRIB(isRequired,ISREQUIRED,false);
253 /** RequestedAttributeType local name */
254 static const XMLCh TYPE_NAME[];
257 BEGIN_XMLOBJECT(SAML_API,AttributeConsumingService,xmltooling::XMLObject,SAML 2.0 AttributeConsumingService element);
258 DECL_INTEGER_ATTRIB(Index,INDEX);
259 DECL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,false);
260 DECL_TYPED_CHILDREN(ServiceName);
261 DECL_TYPED_CHILDREN(ServiceDescription);
262 DECL_TYPED_CHILDREN(RequestedAttribute);
263 /** AttributeConsumingServiceType local name */
264 static const XMLCh TYPE_NAME[];
267 BEGIN_XMLOBJECT(SAML_API,AssertionConsumerService,IndexedEndpointType,SAML 2.0 AssertionConsumerService element);
270 BEGIN_XMLOBJECT(SAML_API,SPSSODescriptor,SSODescriptorType,SAML 2.0 SPSSODescriptor element);
271 DECL_BOOLEAN_ATTRIB(AuthnRequestsSigned,AUTHNREQUESTSSIGNED,false);
272 DECL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,false);
273 DECL_TYPED_CHILDREN(AssertionConsumerService);
274 DECL_TYPED_CHILDREN(AttributeConsumingService);
275 /** SPSSODescriptorType local name */
276 static const XMLCh TYPE_NAME[];
280 BEGIN_XMLOBJECT(SAML_API,AuthnQueryService,EndpointType,SAML 2.0 AuthnQueryService element);
283 BEGIN_XMLOBJECT(SAML_API,AuthnAuthorityDescriptor,RoleDescriptor,SAML 2.0 AuthnAuthorityDescriptor element);
284 DECL_TYPED_CHILDREN(AuthnQueryService);
285 DECL_TYPED_CHILDREN(AssertionIDRequestService);
286 DECL_TYPED_CHILDREN(NameIDFormat);
287 /** AuthnAuthorityDescriptorType local name */
288 static const XMLCh TYPE_NAME[];
292 BEGIN_XMLOBJECT(SAML_API,AuthzService,EndpointType,SAML 2.0 AuthzService element);
295 BEGIN_XMLOBJECT(SAML_API,PDPDescriptor,RoleDescriptor,SAML 2.0 PDPDescriptor element);
296 DECL_TYPED_CHILDREN(AuthzService);
297 DECL_TYPED_CHILDREN(AssertionIDRequestService);
298 DECL_TYPED_CHILDREN(NameIDFormat);
299 /** PDPDescriptorType local name */
300 static const XMLCh TYPE_NAME[];
304 BEGIN_XMLOBJECT(SAML_API,AttributeService,EndpointType,SAML 2.0 AttributeService element);
307 BEGIN_XMLOBJECT(SAML_API,AttributeAuthorityDescriptor,RoleDescriptor,SAML 2.0 AttributeAuthorityDescriptor element);
308 DECL_TYPED_CHILDREN(AttributeService);
309 DECL_TYPED_CHILDREN(AssertionIDRequestService);
310 DECL_TYPED_CHILDREN(NameIDFormat);
311 DECL_TYPED_CHILDREN(AttributeProfile);
312 DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
313 /** AttributeAuthorityDescriptorType local name */
314 static const XMLCh TYPE_NAME[];
318 BEGIN_XMLOBJECT(SAML_API,QueryDescriptorType,RoleDescriptor,SAML 2.0 QueryDescriptorType abstract type);
319 DECL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,false);
320 DECL_TYPED_CHILDREN(NameIDFormat);
321 /** QueryDescriptorType local name */
322 static const XMLCh TYPE_NAME[];
325 BEGIN_XMLOBJECT(SAML_API,AuthnQueryDescriptorType,QueryDescriptorType,SAML 2.0 AuthnQueryDescriptorType extension type);
326 /** AuthnQueryDescriptorType local name */
327 static const XMLCh TYPE_NAME[];
331 BEGIN_XMLOBJECT(SAML_API,AttributeQueryDescriptorType,QueryDescriptorType,SAML 2.0 AttributeQueryDescriptorType extension type);
332 DECL_TYPED_CHILDREN(AttributeConsumingService);
333 /** AttributeQueryDescriptorType local name */
334 static const XMLCh TYPE_NAME[];
338 BEGIN_XMLOBJECT(SAML_API,AuthzDecisionQueryDescriptorType,QueryDescriptorType,SAML 2.0 AuthzDecisionQueryDescriptorType extension type);
339 DECL_TYPED_CHILDREN(ActionNamespace);
340 /** AuthzDecisionQueryDescriptorType local name */
341 static const XMLCh TYPE_NAME[];
345 BEGIN_XMLOBJECT4(SAML_API,AffiliationDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,
346 CacheableSAMLObject,TimeBoundSAMLObject,SAML 2.0 AffiliationDescriptor element);
347 DECL_STRING_ATTRIB(ID,ID);
348 DECL_STRING_ATTRIB(AffiliationOwnerID,AFFILIATIONOWNERID);
349 DECL_TYPED_CHILD(Extensions);
350 DECL_TYPED_CHILDREN(AffiliateMember);
351 DECL_TYPED_CHILDREN(KeyDescriptor);
352 /** AffiliationDescriptorType local name */
353 static const XMLCh TYPE_NAME[];
356 BEGIN_XMLOBJECT4(SAML_API,EntityDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,
357 CacheableSAMLObject,TimeBoundSAMLObject,SAML 2.0 EntityDescriptor element);
358 DECL_STRING_ATTRIB(ID,ID);
359 DECL_STRING_ATTRIB(EntityID,ENTITYID);
360 DECL_TYPED_CHILD(Extensions);
361 DECL_TYPED_CHILD(AffiliationDescriptor);
362 DECL_TYPED_CHILDREN(RoleDescriptor);
363 DECL_TYPED_CHILDREN(IDPSSODescriptor);
364 DECL_TYPED_CHILDREN(SPSSODescriptor);
365 DECL_TYPED_CHILDREN(AuthnAuthorityDescriptor);
366 DECL_TYPED_CHILDREN(AttributeAuthorityDescriptor);
367 DECL_TYPED_CHILDREN(PDPDescriptor);
368 DECL_TYPED_CHILDREN(AuthnQueryDescriptorType);
369 DECL_TYPED_CHILDREN(AttributeQueryDescriptorType);
370 DECL_TYPED_CHILDREN(AuthzDecisionQueryDescriptorType);
371 DECL_TYPED_CHILD(Organization);
372 DECL_TYPED_CHILDREN(ContactPerson);
373 DECL_TYPED_CHILDREN(AdditionalMetadataLocation);
374 /** Finds an arbitrary role type supporting a given protocol. */
375 virtual const RoleDescriptor* getRoleDescriptor(const xmltooling::QName& qname, const XMLCh* protocol) const=0;
376 /** EntityDescriptorType local name */
377 static const XMLCh TYPE_NAME[];
380 BEGIN_XMLOBJECT3(SAML_API,EntitiesDescriptor,SignableObject,CacheableSAMLObject,
381 TimeBoundSAMLObject,SAML 2.0 EntitiesDescriptor element);
382 DECL_STRING_ATTRIB(ID,ID);
383 DECL_STRING_ATTRIB(Name,NAME);
384 DECL_TYPED_CHILD(Extensions);
385 DECL_TYPED_CHILDREN(EntityDescriptor);
386 DECL_TYPED_CHILDREN(EntitiesDescriptor);
387 /** EntitiesDescriptorType local name */
388 static const XMLCh TYPE_NAME[];
391 BEGIN_XMLOBJECT(SAML_API,EntityAttributes,xmltooling::XMLObject,SAML Metadata Extension for Entity Attributes element);
392 DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
393 DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml2);
394 /** EntityAttributesType local name */
395 static const XMLCh TYPE_NAME[];
399 * Predicate to test a role for validity and protocol support.
401 class isValidForProtocol
407 * @param protocol support constant to test for
409 isValidForProtocol(const XMLCh* protocol) : m_time(time(nullptr)), m_protocol(protocol) {
413 * Returns true iff the supplied role is valid now and supports the right protocol.
415 * @param role role to test
416 * @return result of predicate
418 bool operator()(const RoleDescriptor* role) const {
419 return role ? (role->isValid(m_time) && role->hasSupport(m_protocol)) : false;
424 const XMLCh* m_protocol;
428 * Predicate to test a role for type equivalence, validity, and protocol support.
430 class ofTypeValidForProtocol : public isValidForProtocol, public xmltooling::hasSchemaType
436 * @param q schema type to test for
437 * @param protocol support constant to test for
439 ofTypeValidForProtocol(const xmltooling::QName& q, const XMLCh* protocol)
440 : isValidForProtocol(protocol), xmltooling::hasSchemaType(q) {
444 * Returns true iff the supplied role is of the right type, valid now, and supports the right protocol.
446 * @param role role to test
447 * @return result of predicate
449 bool operator()(const RoleDescriptor* role) const {
450 return xmltooling::hasSchemaType::operator()(role) && isValidForProtocol::operator()(role);
454 DECL_SAML2MDOBJECTBUILDER(AdditionalMetadataLocation);
455 DECL_SAML2MDOBJECTBUILDER(AffiliateMember);
456 DECL_SAML2MDOBJECTBUILDER(AffiliationDescriptor);
457 DECL_SAML2MDOBJECTBUILDER(ArtifactResolutionService);
458 DECL_SAML2MDOBJECTBUILDER(AssertionConsumerService);
459 DECL_SAML2MDOBJECTBUILDER(AssertionIDRequestService);
460 DECL_SAML2MDOBJECTBUILDER(AttributeAuthorityDescriptor);
461 DECL_SAML2MDOBJECTBUILDER(AttributeConsumingService);
462 DECL_SAML2MDOBJECTBUILDER(AttributeProfile);
463 DECL_SAML2MDOBJECTBUILDER(AttributeService);
464 DECL_SAML2MDOBJECTBUILDER(AuthnAuthorityDescriptor);
465 DECL_SAML2MDOBJECTBUILDER(AuthnQueryService);
466 DECL_SAML2MDOBJECTBUILDER(AuthzService);
467 DECL_SAML2MDOBJECTBUILDER(Company);
468 DECL_SAML2MDOBJECTBUILDER(ContactPerson);
469 DECL_SAML2MDOBJECTBUILDER(EmailAddress);
470 DECL_SAML2MDOBJECTBUILDER(EntitiesDescriptor);
471 DECL_SAML2MDOBJECTBUILDER(EntityDescriptor);
472 DECL_SAML2MDOBJECTBUILDER(Extensions);
473 DECL_SAML2MDOBJECTBUILDER(GivenName);
474 DECL_SAML2MDOBJECTBUILDER(IDPSSODescriptor);
475 DECL_SAML2MDOBJECTBUILDER(KeyDescriptor);
476 DECL_SAML2MDOBJECTBUILDER(ManageNameIDService);
477 DECL_SAML2MDOBJECTBUILDER(NameIDFormat);
478 DECL_SAML2MDOBJECTBUILDER(NameIDMappingService);
479 DECL_SAML2MDOBJECTBUILDER(Organization);
480 DECL_SAML2MDOBJECTBUILDER(OrganizationName);
481 DECL_SAML2MDOBJECTBUILDER(OrganizationDisplayName);
482 DECL_SAML2MDOBJECTBUILDER(OrganizationURL);
483 DECL_SAML2MDOBJECTBUILDER(PDPDescriptor);
484 DECL_SAML2MDOBJECTBUILDER(RequestedAttribute);
485 DECL_SAML2MDOBJECTBUILDER(ServiceDescription);
486 DECL_SAML2MDOBJECTBUILDER(ServiceName);
487 DECL_SAML2MDOBJECTBUILDER(SingleLogoutService);
488 DECL_SAML2MDOBJECTBUILDER(SingleSignOnService);
489 DECL_SAML2MDOBJECTBUILDER(SPSSODescriptor);
490 DECL_SAML2MDOBJECTBUILDER(SurName);
491 DECL_SAML2MDOBJECTBUILDER(TelephoneNumber);
493 DECL_XMLOBJECTBUILDER(SAML_API,ActionNamespace,samlconstants::SAML20MD_QUERY_EXT_NS,samlconstants::SAML20MD_QUERY_EXT_PREFIX);
494 DECL_XMLOBJECTBUILDER(SAML_API,SourceID,samlconstants::SAML1MD_NS,samlconstants::SAML1MD_PREFIX);
495 DECL_XMLOBJECTBUILDER(SAML_API,EntityAttributes,samlconstants::SAML20MD_ENTITY_ATTRIBUTE_NS,samlconstants::SAML20MD_ENTITY_ATTRIBUTE_PREFIX);
498 * Builder for localizedNameType objects.
500 * This is customized to force the element name to be specified.
502 class SAML_API localizedNameTypeBuilder : public xmltooling::XMLObjectBuilder {
504 virtual ~localizedNameTypeBuilder() {}
505 /** Builder that allows element/type override. */
506 #ifdef HAVE_COVARIANT_RETURNS
507 virtual localizedNameType* buildObject(
509 virtual xmltooling::XMLObject* buildObject(
511 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
514 /** Singleton builder. */
515 static localizedNameType* buildlocalizedNameType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
516 const localizedNameTypeBuilder* b = dynamic_cast<const localizedNameTypeBuilder*>(
517 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,localizedNameType::TYPE_NAME))
520 xmltooling::QName schemaType(samlconstants::SAML20MD_NS,localizedNameType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
521 #ifdef HAVE_COVARIANT_RETURNS
522 return b->buildObject(nsURI, localName, prefix, &schemaType);
524 return dynamic_cast<localizedNameType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
527 throw xmltooling::XMLObjectException("Unable to obtain typed builder for localizedNameType.");
532 * Builder for localizedURIType objects.
534 * This is customized to force the element name to be specified.
536 class SAML_API localizedURITypeBuilder : public xmltooling::XMLObjectBuilder {
538 virtual ~localizedURITypeBuilder() {}
539 /** Builder that allows element/type override. */
540 #ifdef HAVE_COVARIANT_RETURNS
541 virtual localizedURIType* buildObject(
543 virtual xmltooling::XMLObject* buildObject(
545 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
548 /** Singleton builder. */
549 static localizedURIType* buildlocalizedURIType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
550 const localizedURITypeBuilder* b = dynamic_cast<const localizedURITypeBuilder*>(
551 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,localizedURIType::TYPE_NAME))
554 xmltooling::QName schemaType(samlconstants::SAML20MD_NS,localizedURIType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
555 #ifdef HAVE_COVARIANT_RETURNS
556 return b->buildObject(nsURI, localName, prefix, &schemaType);
558 return dynamic_cast<localizedURIType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
561 throw xmltooling::XMLObjectException("Unable to obtain typed builder for localizedURIType.");
566 * Builder for EndpointType objects.
568 * This is customized to force the element name to be specified.
570 class SAML_API EndpointTypeBuilder : public xmltooling::XMLObjectBuilder {
572 virtual ~EndpointTypeBuilder() {}
573 /** Builder that allows element/type override. */
574 #ifdef HAVE_COVARIANT_RETURNS
575 virtual EndpointType* buildObject(
577 virtual xmltooling::XMLObject* buildObject(
579 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
582 /** Singleton builder. */
583 static EndpointType* buildEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
584 const EndpointTypeBuilder* b = dynamic_cast<const EndpointTypeBuilder*>(
585 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,EndpointType::TYPE_NAME))
588 xmltooling::QName schemaType(samlconstants::SAML20MD_NS,EndpointType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
589 #ifdef HAVE_COVARIANT_RETURNS
590 return b->buildObject(nsURI, localName, prefix, &schemaType);
592 return dynamic_cast<EndpointType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
595 throw xmltooling::XMLObjectException("Unable to obtain typed builder for EndpointType.");
600 * Builder for IndexedEndpointType objects.
602 * This is customized to force the element name to be specified.
604 class SAML_API IndexedEndpointTypeBuilder : public xmltooling::XMLObjectBuilder {
606 virtual ~IndexedEndpointTypeBuilder() {}
607 /** Builder that allows element/type override. */
608 #ifdef HAVE_COVARIANT_RETURNS
609 virtual IndexedEndpointType* buildObject(
611 virtual xmltooling::XMLObject* buildObject(
613 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
616 /** Singleton builder. */
617 static IndexedEndpointType* buildIndexedEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
618 const IndexedEndpointTypeBuilder* b = dynamic_cast<const IndexedEndpointTypeBuilder*>(
619 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,IndexedEndpointType::TYPE_NAME))
622 xmltooling::QName schemaType(samlconstants::SAML20MD_NS,IndexedEndpointType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
623 #ifdef HAVE_COVARIANT_RETURNS
624 return b->buildObject(nsURI, localName, prefix, &schemaType);
626 return dynamic_cast<IndexedEndpointType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
629 throw xmltooling::XMLObjectException("Unable to obtain typed builder for IndexedEndpointType.");
634 * Builder for RoleDescriptor extension objects.
636 * This is customized to force the schema type to be specified.
638 class SAML_API RoleDescriptorBuilder : public xmltooling::XMLObjectBuilder {
640 virtual ~RoleDescriptorBuilder() {}
641 /** Builder that allows element/type override. */
642 #ifdef HAVE_COVARIANT_RETURNS
643 virtual RoleDescriptor* buildObject(
645 virtual xmltooling::XMLObject* buildObject(
647 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
650 /** Singleton builder. */
651 static RoleDescriptor* buildRoleDescriptor(const xmltooling::QName& schemaType) {
652 const RoleDescriptorBuilder* b = dynamic_cast<const RoleDescriptorBuilder*>(
653 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,RoleDescriptor::LOCAL_NAME))
656 #ifdef HAVE_COVARIANT_RETURNS
657 return b->buildObject(samlconstants::SAML20MD_NS, RoleDescriptor::LOCAL_NAME, samlconstants::SAML20MD_PREFIX, &schemaType);
659 return dynamic_cast<RoleDescriptor*>(b->buildObject(samlconstants::SAML20MD_NS, RoleDescriptor::LOCAL_NAME, samlconstants::SAML20MD_PREFIX, &schemaType));
662 throw xmltooling::XMLObjectException("Unable to obtain typed builder for RoleDescriptor.");
667 * Builder for AuthnQueryDescriptorType objects.
669 * This is customized to return a RoleDescriptor element with an
670 * xsi:type of AuthnQueryDescriptorType.
672 class SAML_API AuthnQueryDescriptorTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
674 virtual ~AuthnQueryDescriptorTypeBuilder() {}
675 /** Default builder. */
676 #ifdef HAVE_COVARIANT_RETURNS
677 virtual AuthnQueryDescriptorType* buildObject() const {
679 virtual xmltooling::XMLObject* buildObject() const {
681 xmltooling::QName schemaType(
682 samlconstants::SAML20MD_QUERY_EXT_NS,AuthnQueryDescriptorType::TYPE_NAME,samlconstants::SAML20MD_QUERY_EXT_PREFIX
685 samlconstants::SAML20MD_NS,AuthnQueryDescriptorType::LOCAL_NAME,samlconstants::SAML20MD_PREFIX,&schemaType
688 /** Builder that allows element/type override. */
689 #ifdef HAVE_COVARIANT_RETURNS
690 virtual AuthnQueryDescriptorType* buildObject(
692 virtual xmltooling::XMLObject* buildObject(
694 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
697 /** Singleton builder. */
698 static AuthnQueryDescriptorType* buildAuthnQueryDescriptorType() {
699 const AuthnQueryDescriptorTypeBuilder* b = dynamic_cast<const AuthnQueryDescriptorTypeBuilder*>(
700 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_QUERY_EXT_NS,AuthnQueryDescriptorType::TYPE_NAME))
703 #ifdef HAVE_COVARIANT_RETURNS
704 return b->buildObject();
706 return dynamic_cast<AuthnQueryDescriptorType*>(b->buildObject());
709 throw xmltooling::XMLObjectException("Unable to obtain typed builder for AuthnQueryDescriptorType.");
714 * Builder for AttributeQueryDescriptorType objects.
716 * This is customized to return a RoleDescriptor element with an
717 * xsi:type of AttributeQueryDescriptorType.
719 class SAML_API AttributeQueryDescriptorTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
721 virtual ~AttributeQueryDescriptorTypeBuilder() {}
722 /** Default builder. */
723 #ifdef HAVE_COVARIANT_RETURNS
724 virtual AttributeQueryDescriptorType* buildObject() const {
726 virtual xmltooling::XMLObject* buildObject() const {
728 xmltooling::QName schemaType(
729 samlconstants::SAML20MD_QUERY_EXT_NS,AttributeQueryDescriptorType::TYPE_NAME,samlconstants::SAML20MD_QUERY_EXT_PREFIX
732 samlconstants::SAML20MD_NS,AttributeQueryDescriptorType::LOCAL_NAME,samlconstants::SAML20MD_PREFIX,&schemaType
735 /** Builder that allows element/type override. */
736 #ifdef HAVE_COVARIANT_RETURNS
737 virtual AttributeQueryDescriptorType* buildObject(
739 virtual xmltooling::XMLObject* buildObject(
741 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
744 /** Singleton builder. */
745 static AttributeQueryDescriptorType* buildAttributeQueryDescriptorType() {
746 const AttributeQueryDescriptorTypeBuilder* b = dynamic_cast<const AttributeQueryDescriptorTypeBuilder*>(
747 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_QUERY_EXT_NS,AttributeQueryDescriptorType::TYPE_NAME))
750 #ifdef HAVE_COVARIANT_RETURNS
751 return b->buildObject();
753 return dynamic_cast<AttributeQueryDescriptorType*>(b->buildObject());
756 throw xmltooling::XMLObjectException("Unable to obtain typed builder for AttributeQueryDescriptorType.");
761 * Builder for AuthzDecisionQueryDescriptorType objects.
763 * This is customized to return a RoleDescriptor element with an
764 * xsi:type of AuthzDecisionQueryDescriptorType.
766 class SAML_API AuthzDecisionQueryDescriptorTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
768 virtual ~AuthzDecisionQueryDescriptorTypeBuilder() {}
769 /** Default builder. */
770 #ifdef HAVE_COVARIANT_RETURNS
771 virtual AuthzDecisionQueryDescriptorType* buildObject() const {
773 virtual xmltooling::XMLObject* buildObject() const {
775 xmltooling::QName schemaType(
776 samlconstants::SAML20MD_QUERY_EXT_NS,AuthzDecisionQueryDescriptorType::TYPE_NAME,samlconstants::SAML20MD_QUERY_EXT_PREFIX
779 samlconstants::SAML20MD_NS,AuthzDecisionQueryDescriptorType::LOCAL_NAME,samlconstants::SAML20MD_PREFIX,&schemaType
782 /** Builder that allows element/type override. */
783 #ifdef HAVE_COVARIANT_RETURNS
784 virtual AuthzDecisionQueryDescriptorType* buildObject(
786 virtual xmltooling::XMLObject* buildObject(
788 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
791 /** Singleton builder. */
792 static AuthzDecisionQueryDescriptorType* buildAuthzDecisionQueryDescriptorType() {
793 const AuthzDecisionQueryDescriptorTypeBuilder* b = dynamic_cast<const AuthzDecisionQueryDescriptorTypeBuilder*>(
794 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_QUERY_EXT_NS,AuthzDecisionQueryDescriptorType::TYPE_NAME))
797 #ifdef HAVE_COVARIANT_RETURNS
798 return b->buildObject();
800 return dynamic_cast<AuthzDecisionQueryDescriptorType*>(b->buildObject());
803 throw xmltooling::XMLObjectException("Unable to obtain typed builder for AuthzDecisionQueryDescriptorType.");
808 * Registers builders and validators for SAML 2.0 Metadata classes into the runtime.
810 void SAML_API registerMetadataClasses();
814 #endif /* __saml2_metadata_h__ */