2 * Licensed to the University Corporation for Advanced Internet
3 * Development, Inc. (UCAID) under one or more contributor license
4 * agreements. See the NOTICE file distributed with this work for
5 * additional information regarding copyright ownership.
7 * UCAID licenses this file to you under the Apache License,
8 * Version 2.0 (the "License"); you may not use this file except
9 * in compliance with the License. You may obtain a copy of the
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17 * either express or implied. See the License for the specific
18 * language governing permissions and limitations under the License.
22 * @file saml/saml2/metadata/Metadata.h
24 * XMLObjects representing the SAML 2.0 Metadata schema.
27 #ifndef __saml2_metadata_h__
28 #define __saml2_metadata_h__
30 #include <saml/saml2/core/Assertions.h>
33 #include <xercesc/util/XMLUniDefs.hpp>
34 #include <xmltooling/util/Predicates.h>
37 #define DECL_SAML2MDOBJECTBUILDER(cname) \
38 DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML20MD_NS,samlconstants::SAML20MD_PREFIX)
40 namespace xmltooling {
41 class XMLTOOL_API Credential;
42 class XMLTOOL_API CredentialResolver;
45 namespace xmlencryption {
46 class XMLTOOL_API EncryptionMethod;
52 * @namespace opensaml::saml2md
53 * SAML 2.0 metadata namespace
57 class SAML_API DigestMethod;
58 class SAML_API SigningMethod;
61 * Base class for metadata objects that feature a cacheDuration attribute.
63 class SAML_API CacheableSAMLObject : public virtual xmltooling::XMLObject
66 CacheableSAMLObject() {}
68 ~CacheableSAMLObject() {}
69 DECL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION);
73 * Base class for metadata objects that feature a validUntil attribute.
75 class SAML_API TimeBoundSAMLObject : public virtual xmltooling::XMLObject
78 TimeBoundSAMLObject() {}
80 ~TimeBoundSAMLObject() {}
81 DECL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL);
82 /** Returns true iff the object is valid at the current time. */
83 bool isValid() const {
84 return time(nullptr) <= getValidUntilEpoch();
87 * Returns true iff the object is valid at the supplied time.
89 * @param t the time to check against
91 bool isValid(time_t t) const {
92 return t <= getValidUntilEpoch();
96 DECL_XMLOBJECT_SIMPLE(SAML_API,AffiliateMember,ID,SAML 2.0 AffiliateMember element);
97 DECL_XMLOBJECT_SIMPLE(SAML_API,AttributeProfile,ProfileURI,SAML 2.0 AttributeProfile element);
98 DECL_XMLOBJECT_SIMPLE(SAML_API,Company,Name,SAML 2.0 Company element);
99 DECL_XMLOBJECT_SIMPLE(SAML_API,EmailAddress,Address,SAML 2.0 EmailAddress element);
100 DECL_XMLOBJECT_SIMPLE(SAML_API,GivenName,Name,SAML 2.0 GivenName element);
101 DECL_XMLOBJECT_SIMPLE(SAML_API,NameIDFormat,Format,SAML 2.0 NameIDFormat element);
102 DECL_XMLOBJECT_SIMPLE(SAML_API,SurName,Name,SAML 2.0 SurName element);
103 DECL_XMLOBJECT_SIMPLE(SAML_API,TelephoneNumber,Number,SAML 2.0 TelephoneNumber element);
105 DECL_XMLOBJECT_SIMPLE(SAML_API,ActionNamespace,Namespace,SAML 2.0 Metadata Extension ActionNamespace element);
107 BEGIN_XMLOBJECT(SAML_API,localizedNameType,xmltooling::XMLObject,SAML 2.0 localizedNameType type);
108 /** xml:lang attribute name. */
109 static const XMLCh LANG_ATTRIB_NAME[];
112 * Sets the xml:lang attribute.
114 * @param Lang the value to set
116 virtual void setLang(const XMLCh* Lang)=0;
118 /** localizedNameType local name */
119 static const XMLCh TYPE_NAME[];
122 BEGIN_XMLOBJECT(SAML_API,localizedURIType,xmltooling::XMLObject,SAML 2.0 localizedURIType type);
123 /** xml:lang attribute name. */
124 static const XMLCh LANG_ATTRIB_NAME[];
127 * Sets the xml:lang attribute.
129 * @param Lang the value to set
131 virtual void setLang(const XMLCh* Lang)=0;
133 /** localizedURIType local name */
134 static const XMLCh TYPE_NAME[];
137 BEGIN_XMLOBJECT(SAML_API,OrganizationName,localizedNameType,SAML 2.0 OrganizationName element);
138 DECL_SIMPLE_CONTENT(Name);
141 BEGIN_XMLOBJECT(SAML_API,OrganizationDisplayName,localizedNameType,SAML 2.0 OrganizationDisplayName element);
142 DECL_SIMPLE_CONTENT(Name);
145 BEGIN_XMLOBJECT(SAML_API,OrganizationURL,localizedURIType,SAML 2.0 OrganizationURL element);
146 DECL_SIMPLE_CONTENT(URL);
149 BEGIN_XMLOBJECT(SAML_API,Extensions,xmltooling::ElementExtensibleXMLObject,SAML 2.0 Extensions element);
150 /** ExtensionsType local name */
151 static const XMLCh TYPE_NAME[];
154 BEGIN_XMLOBJECT(SAML_API,Organization,xmltooling::AttributeExtensibleXMLObject,SAML 2.0 Organization element);
155 DECL_TYPED_CHILD(Extensions);
156 DECL_TYPED_CHILDREN(OrganizationName);
157 DECL_TYPED_CHILDREN(OrganizationDisplayName);
158 DECL_TYPED_CHILDREN(OrganizationURL);
159 /** OrganizationType local name */
160 static const XMLCh TYPE_NAME[];
163 BEGIN_XMLOBJECT(SAML_API,ContactPerson,xmltooling::AttributeExtensibleXMLObject,SAML 2.0 ContactPerson element);
164 DECL_STRING_ATTRIB(ContactType,CONTACTTYPE);
165 DECL_TYPED_CHILD(Extensions);
166 DECL_TYPED_CHILD(Company);
167 DECL_TYPED_CHILD(GivenName);
168 DECL_TYPED_CHILD(SurName);
169 DECL_TYPED_CHILDREN(EmailAddress);
170 DECL_TYPED_CHILDREN(TelephoneNumber);
171 /** ContactType local name */
172 static const XMLCh TYPE_NAME[];
173 /** technical Contact Type */
174 static const XMLCh CONTACT_TECHNICAL[];
175 /** support Contact Type */
176 static const XMLCh CONTACT_SUPPORT[];
177 /** administrative Contact Type */
178 static const XMLCh CONTACT_ADMINISTRATIVE[];
179 /** billing Contact Type */
180 static const XMLCh CONTACT_BILLING[];
181 /** other Contact Type */
182 static const XMLCh CONTACT_OTHER[];
185 BEGIN_XMLOBJECT(SAML_API,AdditionalMetadataLocation,xmltooling::XMLObject,SAML 2.0 AdditionalMetadataLocation element);
186 DECL_STRING_ATTRIB(Namespace,NAMESPACE);
187 DECL_SIMPLE_CONTENT(Location);
188 /** AdditionalMetadataLocationType local name */
189 static const XMLCh TYPE_NAME[];
192 BEGIN_XMLOBJECT(SAML_API,KeyDescriptor,xmltooling::XMLObject,SAML 2.0 KeyDescriptor element);
193 DECL_STRING_ATTRIB(Use,USE);
194 DECL_TYPED_FOREIGN_CHILD(KeyInfo,xmlsignature);
195 DECL_TYPED_FOREIGN_CHILDREN(EncryptionMethod,xmlencryption);
196 /** KeyDescriptorType local name */
197 static const XMLCh TYPE_NAME[];
198 /** encryption Key Type */
199 static const XMLCh KEYTYPE_ENCRYPTION[];
200 /** signing Key Type */
201 static const XMLCh KEYTYPE_SIGNING[];
204 BEGIN_XMLOBJECT4(SAML_API,RoleDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,
205 CacheableSAMLObject,TimeBoundSAMLObject,SAML 2.0 RoleDescriptor abstract element);
206 DECL_STRING_ATTRIB(ID,ID);
207 DECL_STRING_ATTRIB(ProtocolSupportEnumeration,PROTOCOLSUPPORTENUMERATION);
208 /** Searches the ProtocolSupportEnumeration attribute for the indicated protocol. */
209 virtual bool hasSupport(const XMLCh* protocol) const=0;
210 /** Adds the indicated protocol to the ProtocolSupportEnumeration attribute. */
211 virtual void addSupport(const XMLCh* protocol)=0;
212 DECL_STRING_ATTRIB(ErrorURL,ERRORURL);
213 DECL_TYPED_CHILD(Extensions);
214 DECL_TYPED_CHILDREN(KeyDescriptor);
215 DECL_TYPED_CHILD(Organization);
216 DECL_TYPED_CHILDREN(ContactPerson);
217 /** Returns the first digest method supported by the role and the underlying implementation, if any. */
218 virtual const DigestMethod* getDigestMethod() const;
219 /** Returns the first signing method supported by the role and the underlying implementation, if any, along with a matching credential. */
220 virtual std::pair<const SigningMethod*,const xmltooling::Credential*> getSigningMethod(
221 const xmltooling::CredentialResolver& resolver, xmltooling::CredentialCriteria& cc
225 BEGIN_XMLOBJECT2(SAML_API,RoleDescriptorType,RoleDescriptor,xmltooling::ElementExtensibleXMLObject,SAML 2.0 RoleDescriptor extension);
228 BEGIN_XMLOBJECT(SAML_API,EndpointType,xmltooling::ElementProxy,SAML 2.0 EndpointType type);
229 DECL_STRING_ATTRIB(Binding,BINDING);
230 DECL_STRING_ATTRIB(Location,LOCATION);
231 DECL_STRING_ATTRIB(ResponseLocation,RESPONSELOCATION);
232 /** EndpointType local name */
233 static const XMLCh TYPE_NAME[];
236 BEGIN_XMLOBJECT(SAML_API,IndexedEndpointType,EndpointType,SAML 2.0 IndexedEndpointType type);
237 DECL_INTEGER_ATTRIB(Index,INDEX);
238 DECL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,false);
239 /** IndexedEndpointType local name */
240 static const XMLCh TYPE_NAME[];
243 BEGIN_XMLOBJECT(SAML_API,ArtifactResolutionService,IndexedEndpointType,SAML 2.0 ArtifactResolutionService element);
246 BEGIN_XMLOBJECT(SAML_API,SingleLogoutService,EndpointType,SAML 2.0 SingleLogoutService element);
249 BEGIN_XMLOBJECT(SAML_API,ManageNameIDService,EndpointType,SAML 2.0 ManageNameIDService element);
252 BEGIN_XMLOBJECT(SAML_API,SSODescriptorType,RoleDescriptor,SAML 2.0 SSODescriptorType abstract type);
253 DECL_TYPED_CHILDREN(ArtifactResolutionService);
254 DECL_TYPED_CHILDREN(SingleLogoutService);
255 DECL_TYPED_CHILDREN(ManageNameIDService);
256 DECL_TYPED_CHILDREN(NameIDFormat);
257 /** SSODescriptorType local name */
258 static const XMLCh TYPE_NAME[];
261 BEGIN_XMLOBJECT(SAML_API,SingleSignOnService,EndpointType,SAML 2.0 SingleSignOnService element);
264 BEGIN_XMLOBJECT(SAML_API,NameIDMappingService,EndpointType,SAML 2.0 NameIDMappingService element);
267 BEGIN_XMLOBJECT(SAML_API,AssertionIDRequestService,EndpointType,SAML 2.0 AssertionIDRequestService element);
270 BEGIN_XMLOBJECT(SAML_API,IDPSSODescriptor,SSODescriptorType,SAML 2.0 IDPSSODescriptor element);
271 DECL_BOOLEAN_ATTRIB(WantAuthnRequestsSigned,WANTAUTHNREQUESTSSIGNED,false);
272 DECL_TYPED_CHILDREN(SingleSignOnService);
273 DECL_TYPED_CHILDREN(NameIDMappingService);
274 DECL_TYPED_CHILDREN(AssertionIDRequestService);
275 DECL_TYPED_CHILDREN(AttributeProfile);
276 DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
277 /** IDPSSODescriptorType local name */
278 static const XMLCh TYPE_NAME[];
282 BEGIN_XMLOBJECT(SAML_API,ServiceName,localizedNameType,SAML 2.0 ServiceName element);
283 DECL_SIMPLE_CONTENT(Name);
286 BEGIN_XMLOBJECT(SAML_API,ServiceDescription,localizedNameType,SAML 2.0 ServiceDescription element);
287 DECL_SIMPLE_CONTENT(Description);
290 BEGIN_XMLOBJECT(SAML_API,RequestedAttribute,saml2::Attribute,SAML 2.0 RequestedAttribute element);
291 DECL_BOOLEAN_ATTRIB(isRequired,ISREQUIRED,false);
292 /** RequestedAttributeType local name */
293 static const XMLCh TYPE_NAME[];
296 BEGIN_XMLOBJECT(SAML_API,AttributeConsumingService,xmltooling::XMLObject,SAML 2.0 AttributeConsumingService element);
297 DECL_INTEGER_ATTRIB(Index,INDEX);
298 DECL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,false);
299 DECL_TYPED_CHILDREN(ServiceName);
300 DECL_TYPED_CHILDREN(ServiceDescription);
301 DECL_TYPED_CHILDREN(RequestedAttribute);
302 /** AttributeConsumingServiceType local name */
303 static const XMLCh TYPE_NAME[];
306 BEGIN_XMLOBJECT(SAML_API,AssertionConsumerService,IndexedEndpointType,SAML 2.0 AssertionConsumerService element);
309 BEGIN_XMLOBJECT(SAML_API,SPSSODescriptor,SSODescriptorType,SAML 2.0 SPSSODescriptor element);
310 DECL_BOOLEAN_ATTRIB(AuthnRequestsSigned,AUTHNREQUESTSSIGNED,false);
311 DECL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,false);
312 DECL_TYPED_CHILDREN(AssertionConsumerService);
313 DECL_TYPED_CHILDREN(AttributeConsumingService);
314 /** SPSSODescriptorType local name */
315 static const XMLCh TYPE_NAME[];
319 BEGIN_XMLOBJECT(SAML_API,AuthnQueryService,EndpointType,SAML 2.0 AuthnQueryService element);
322 BEGIN_XMLOBJECT(SAML_API,AuthnAuthorityDescriptor,RoleDescriptor,SAML 2.0 AuthnAuthorityDescriptor element);
323 DECL_TYPED_CHILDREN(AuthnQueryService);
324 DECL_TYPED_CHILDREN(AssertionIDRequestService);
325 DECL_TYPED_CHILDREN(NameIDFormat);
326 /** AuthnAuthorityDescriptorType local name */
327 static const XMLCh TYPE_NAME[];
331 BEGIN_XMLOBJECT(SAML_API,AuthzService,EndpointType,SAML 2.0 AuthzService element);
334 BEGIN_XMLOBJECT(SAML_API,PDPDescriptor,RoleDescriptor,SAML 2.0 PDPDescriptor element);
335 DECL_TYPED_CHILDREN(AuthzService);
336 DECL_TYPED_CHILDREN(AssertionIDRequestService);
337 DECL_TYPED_CHILDREN(NameIDFormat);
338 /** PDPDescriptorType local name */
339 static const XMLCh TYPE_NAME[];
343 BEGIN_XMLOBJECT(SAML_API,AttributeService,EndpointType,SAML 2.0 AttributeService element);
346 BEGIN_XMLOBJECT(SAML_API,AttributeAuthorityDescriptor,RoleDescriptor,SAML 2.0 AttributeAuthorityDescriptor element);
347 DECL_TYPED_CHILDREN(AttributeService);
348 DECL_TYPED_CHILDREN(AssertionIDRequestService);
349 DECL_TYPED_CHILDREN(NameIDFormat);
350 DECL_TYPED_CHILDREN(AttributeProfile);
351 DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
352 /** AttributeAuthorityDescriptorType local name */
353 static const XMLCh TYPE_NAME[];
357 BEGIN_XMLOBJECT(SAML_API,QueryDescriptorType,RoleDescriptor,SAML 2.0 QueryDescriptorType abstract type);
358 DECL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,false);
359 DECL_TYPED_CHILDREN(NameIDFormat);
360 /** QueryDescriptorType local name */
361 static const XMLCh TYPE_NAME[];
364 BEGIN_XMLOBJECT(SAML_API,AuthnQueryDescriptorType,QueryDescriptorType,SAML 2.0 AuthnQueryDescriptorType extension type);
365 /** AuthnQueryDescriptorType local name */
366 static const XMLCh TYPE_NAME[];
370 BEGIN_XMLOBJECT(SAML_API,AttributeQueryDescriptorType,QueryDescriptorType,SAML 2.0 AttributeQueryDescriptorType extension type);
371 DECL_TYPED_CHILDREN(AttributeConsumingService);
372 /** AttributeQueryDescriptorType local name */
373 static const XMLCh TYPE_NAME[];
377 BEGIN_XMLOBJECT(SAML_API,AuthzDecisionQueryDescriptorType,QueryDescriptorType,SAML 2.0 AuthzDecisionQueryDescriptorType extension type);
378 DECL_TYPED_CHILDREN(ActionNamespace);
379 /** AuthzDecisionQueryDescriptorType local name */
380 static const XMLCh TYPE_NAME[];
384 BEGIN_XMLOBJECT4(SAML_API,AffiliationDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,
385 CacheableSAMLObject,TimeBoundSAMLObject,SAML 2.0 AffiliationDescriptor element);
386 DECL_STRING_ATTRIB(ID,ID);
387 DECL_STRING_ATTRIB(AffiliationOwnerID,AFFILIATIONOWNERID);
388 DECL_TYPED_CHILD(Extensions);
389 DECL_TYPED_CHILDREN(AffiliateMember);
390 DECL_TYPED_CHILDREN(KeyDescriptor);
391 /** AffiliationDescriptorType local name */
392 static const XMLCh TYPE_NAME[];
395 BEGIN_XMLOBJECT4(SAML_API,EntityDescriptor,xmltooling::AttributeExtensibleXMLObject,SignableObject,
396 CacheableSAMLObject,TimeBoundSAMLObject,SAML 2.0 EntityDescriptor element);
397 DECL_STRING_ATTRIB(ID,ID);
398 DECL_STRING_ATTRIB(EntityID,ENTITYID);
399 DECL_TYPED_CHILD(Extensions);
400 DECL_TYPED_CHILD(AffiliationDescriptor);
401 DECL_TYPED_CHILDREN(RoleDescriptor);
402 DECL_TYPED_CHILDREN(IDPSSODescriptor);
403 DECL_TYPED_CHILDREN(SPSSODescriptor);
404 DECL_TYPED_CHILDREN(AuthnAuthorityDescriptor);
405 DECL_TYPED_CHILDREN(AttributeAuthorityDescriptor);
406 DECL_TYPED_CHILDREN(PDPDescriptor);
407 DECL_TYPED_CHILDREN(AuthnQueryDescriptorType);
408 DECL_TYPED_CHILDREN(AttributeQueryDescriptorType);
409 DECL_TYPED_CHILDREN(AuthzDecisionQueryDescriptorType);
410 DECL_TYPED_CHILD(Organization);
411 DECL_TYPED_CHILDREN(ContactPerson);
412 DECL_TYPED_CHILDREN(AdditionalMetadataLocation);
413 /** Finds an arbitrary role type supporting a given protocol. */
414 virtual const RoleDescriptor* getRoleDescriptor(const xmltooling::QName& qname, const XMLCh* protocol) const=0;
415 /** EntityDescriptorType local name */
416 static const XMLCh TYPE_NAME[];
419 BEGIN_XMLOBJECT3(SAML_API,EntitiesDescriptor,SignableObject,CacheableSAMLObject,
420 TimeBoundSAMLObject,SAML 2.0 EntitiesDescriptor element);
421 DECL_STRING_ATTRIB(ID,ID);
422 DECL_STRING_ATTRIB(Name,NAME);
423 DECL_TYPED_CHILD(Extensions);
424 DECL_TYPED_CHILDREN(EntityDescriptor);
425 DECL_TYPED_CHILDREN(EntitiesDescriptor);
426 /** EntitiesDescriptorType local name */
427 static const XMLCh TYPE_NAME[];
430 // Known Metadata Extensions
432 DECL_XMLOBJECT_SIMPLE(SAML_API,SourceID,ID,SAML 1.x Metadata Profile SourceID element);
434 BEGIN_XMLOBJECT(SAML_API,DiscoveryResponse,IndexedEndpointType,Identity Provider Discovery Protocol DiscoveryResponse element);
437 BEGIN_XMLOBJECT(SAML_API,RequestInitiator,EndpointType,Service Provider Request Initiation RequestInitiator element);
440 BEGIN_XMLOBJECT(SAML_API,EntityAttributes,xmltooling::XMLObject,SAML Metadata Extension for Entity Attributes element);
441 DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
442 DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml2);
443 /** EntityAttributesType local name */
444 static const XMLCh TYPE_NAME[];
447 BEGIN_XMLOBJECT(SAML_API,DigestMethod,xmltooling::ElementExtensibleXMLObject,SAML Metadata Extension for Algorithm Support DigestMethod element);
448 DECL_STRING_ATTRIB(Algorithm,ALGORITHM);
449 /** DigestMethodType local name */
450 static const XMLCh TYPE_NAME[];
453 BEGIN_XMLOBJECT(SAML_API,SigningMethod,xmltooling::ElementExtensibleXMLObject,SAML Metadata Extension for Algorithm Support SigningMethod element);
454 DECL_STRING_ATTRIB(Algorithm,ALGORITHM);
455 DECL_INTEGER_ATTRIB(MinKeySize,MINKEYSIZE);
456 DECL_INTEGER_ATTRIB(MaxKeySize,MAXKEYSIZE);
457 /** SigningMethodType local name */
458 static const XMLCh TYPE_NAME[];
461 BEGIN_XMLOBJECT(SAML_API,DisplayName,localizedNameType,SAML Metadata Extension for Login UI DisplayName element);
462 DECL_SIMPLE_CONTENT(Name);
465 BEGIN_XMLOBJECT(SAML_API,Description,localizedNameType,SAML Metadata Extension for Login UI Description element);
466 DECL_SIMPLE_CONTENT(Description);
469 BEGIN_XMLOBJECT(SAML_API,Keywords,xmltooling::XMLObject,SAML Metadata Extension for Login UI Keywords element);
470 /** xml:lang attribute name. */
471 static const XMLCh LANG_ATTRIB_NAME[];
474 * Sets the xml:lang attribute.
476 * @param Lang the value to set
478 virtual void setLang(const XMLCh* Lang)=0;
480 DECL_SIMPLE_CONTENT(Values);
481 /** KeywordsType local name */
482 static const XMLCh TYPE_NAME[];
485 BEGIN_XMLOBJECT(SAML_API,Logo,xmltooling::XMLObject,SAML Metadata Extension for Login UI Logo element);
486 /** xml:lang attribute name. */
487 static const XMLCh LANG_ATTRIB_NAME[];
490 * Sets the xml:lang attribute.
492 * @param Lang the value to set
494 virtual void setLang(const XMLCh* Lang)=0;
496 DECL_INTEGER_ATTRIB(Height,HEIGHT);
497 DECL_INTEGER_ATTRIB(Width,WIDTH);
498 DECL_SIMPLE_CONTENT(URL);
499 /** LogoType local name */
500 static const XMLCh TYPE_NAME[];
503 BEGIN_XMLOBJECT(SAML_API,InformationURL,localizedURIType,SAML Metadata Extension for Login UI InformationURL element);
504 DECL_SIMPLE_CONTENT(URL);
507 BEGIN_XMLOBJECT(SAML_API,PrivacyStatementURL,localizedURIType,SAML Metadata Extension for Login UI PrivacyStatementURL element);
508 DECL_SIMPLE_CONTENT(URL);
511 BEGIN_XMLOBJECT(SAML_API,UIInfo,xmltooling::ElementExtensibleXMLObject,SAML Metadata Extension for Login UI UIInfo element);
512 DECL_TYPED_CHILDREN(DisplayName);
513 DECL_TYPED_CHILDREN(Description);
514 DECL_TYPED_CHILDREN(Keywords);
515 DECL_TYPED_CHILDREN(Logo);
516 DECL_TYPED_CHILDREN(InformationURL);
517 DECL_TYPED_CHILDREN(PrivacyStatementURL);
518 /** UIInfoType local name */
519 static const XMLCh TYPE_NAME[];
522 DECL_XMLOBJECT_SIMPLE(SAML_API,IPHint,Hint,SAML Metadata Extension for Login UI IPHint element);
523 DECL_XMLOBJECT_SIMPLE(SAML_API,DomainHint,Hint,SAML Metadata Extension for Login UI DomainHint element);
524 DECL_XMLOBJECT_SIMPLE(SAML_API,GeolocationHint,Hint,SAML Metadata Extension for Login UI GeolocationHint element);
526 BEGIN_XMLOBJECT(SAML_API,DiscoHints,xmltooling::ElementExtensibleXMLObject,SAML Metadata Extension for Login UI DiscoHints element);
527 DECL_TYPED_CHILDREN(IPHint);
528 DECL_TYPED_CHILDREN(DomainHint);
529 DECL_TYPED_CHILDREN(GeolocationHint);
530 /** DiscoHintsType local name */
531 static const XMLCh TYPE_NAME[];
534 BEGIN_XMLOBJECT(SAML_API, RegistrationPolicy, localizedURIType, SAML Metadata Extension for RPI RegistrationPolicy element);
535 DECL_SIMPLE_CONTENT(URL);
538 BEGIN_XMLOBJECT(SAML_API,RegistrationInfo,xmltooling::ElementProxy,SAML Metadata Extension for RPI RegistrationInfo element);
539 DECL_STRING_ATTRIB(RegistrationAuthority,REGAUTHORITY);
540 DECL_DATETIME_ATTRIB(RegistrationInstant,REGINSTANT);
541 DECL_TYPED_CHILDREN(RegistrationPolicy);
542 /** RegistrationInfoType local name */
543 static const XMLCh TYPE_NAME[];
546 BEGIN_XMLOBJECT(SAML_API,Publication,xmltooling::XMLObject,SAML Metadata Extension for RPI Publication element);
547 DECL_STRING_ATTRIB(Publisher,PUBLISHER);
548 DECL_DATETIME_ATTRIB(CreationInstant,CREATIONINSTANT);
549 DECL_STRING_ATTRIB(PublicationID,PUBLICATIONID);
550 /** PublicationType local name */
551 static const XMLCh TYPE_NAME[];
554 BEGIN_XMLOBJECT(SAML_API,PublicationPath,xmltooling::XMLObject,SAML Metadata Extension for RPI PublicationPath element);
555 DECL_TYPED_CHILDREN(Publication);
556 /** PublicationPathType local name */
557 static const XMLCh TYPE_NAME[];
560 BEGIN_XMLOBJECT(SAML_API, UsagePolicy, localizedURIType, SAML Metadata Extension for RPI UsagePolicy element);
561 DECL_SIMPLE_CONTENT(URL);
564 BEGIN_XMLOBJECT(SAML_API,PublicationInfo,xmltooling::ElementProxy,SAML Metadata Extension for RPI PublicationInfo element);
565 DECL_STRING_ATTRIB(Publisher,PUBLISHER);
566 DECL_DATETIME_ATTRIB(CreationInstant,CREATIONINSTANT);
567 DECL_STRING_ATTRIB(PublicationID,PUBLICATIONID);
568 DECL_TYPED_CHILDREN(UsagePolicy);
569 /** PublicationInfoType local name */
570 static const XMLCh TYPE_NAME[];
574 * Predicate to test a role for validity and protocol support.
576 class isValidForProtocol
582 * @param protocol support constant to test for
584 isValidForProtocol(const XMLCh* protocol) : m_time(time(nullptr)), m_protocol(protocol) {
588 * Returns true iff the supplied role is valid now and supports the right protocol.
590 * @param role role to test
591 * @return result of predicate
593 bool operator()(const RoleDescriptor* role) const {
594 return role ? (role->isValid(m_time) && role->hasSupport(m_protocol)) : false;
599 const XMLCh* m_protocol;
603 * Predicate to test a role for type equivalence, validity, and protocol support.
605 class ofTypeValidForProtocol : public isValidForProtocol, public xmltooling::hasSchemaType
611 * @param q schema type to test for
612 * @param protocol support constant to test for
614 ofTypeValidForProtocol(const xmltooling::QName& q, const XMLCh* protocol)
615 : isValidForProtocol(protocol), xmltooling::hasSchemaType(q) {
619 * Returns true iff the supplied role is of the right type, valid now, and supports the right protocol.
621 * @param role role to test
622 * @return result of predicate
624 bool operator()(const RoleDescriptor* role) const {
625 return xmltooling::hasSchemaType::operator()(role) && isValidForProtocol::operator()(role);
629 DECL_SAML2MDOBJECTBUILDER(AdditionalMetadataLocation);
630 DECL_SAML2MDOBJECTBUILDER(AffiliateMember);
631 DECL_SAML2MDOBJECTBUILDER(AffiliationDescriptor);
632 DECL_SAML2MDOBJECTBUILDER(ArtifactResolutionService);
633 DECL_SAML2MDOBJECTBUILDER(AssertionConsumerService);
634 DECL_SAML2MDOBJECTBUILDER(AssertionIDRequestService);
635 DECL_SAML2MDOBJECTBUILDER(AttributeAuthorityDescriptor);
636 DECL_SAML2MDOBJECTBUILDER(AttributeConsumingService);
637 DECL_SAML2MDOBJECTBUILDER(AttributeProfile);
638 DECL_SAML2MDOBJECTBUILDER(AttributeService);
639 DECL_SAML2MDOBJECTBUILDER(AuthnAuthorityDescriptor);
640 DECL_SAML2MDOBJECTBUILDER(AuthnQueryService);
641 DECL_SAML2MDOBJECTBUILDER(AuthzService);
642 DECL_SAML2MDOBJECTBUILDER(Company);
643 DECL_SAML2MDOBJECTBUILDER(ContactPerson);
644 DECL_SAML2MDOBJECTBUILDER(EmailAddress);
645 DECL_SAML2MDOBJECTBUILDER(EntitiesDescriptor);
646 DECL_SAML2MDOBJECTBUILDER(EntityDescriptor);
647 DECL_SAML2MDOBJECTBUILDER(Extensions);
648 DECL_SAML2MDOBJECTBUILDER(GivenName);
649 DECL_SAML2MDOBJECTBUILDER(IDPSSODescriptor);
650 DECL_SAML2MDOBJECTBUILDER(KeyDescriptor);
651 DECL_SAML2MDOBJECTBUILDER(ManageNameIDService);
652 DECL_SAML2MDOBJECTBUILDER(NameIDFormat);
653 DECL_SAML2MDOBJECTBUILDER(NameIDMappingService);
654 DECL_SAML2MDOBJECTBUILDER(Organization);
655 DECL_SAML2MDOBJECTBUILDER(OrganizationName);
656 DECL_SAML2MDOBJECTBUILDER(OrganizationDisplayName);
657 DECL_SAML2MDOBJECTBUILDER(OrganizationURL);
658 DECL_SAML2MDOBJECTBUILDER(PDPDescriptor);
659 DECL_SAML2MDOBJECTBUILDER(RequestedAttribute);
660 DECL_SAML2MDOBJECTBUILDER(ServiceDescription);
661 DECL_SAML2MDOBJECTBUILDER(ServiceName);
662 DECL_SAML2MDOBJECTBUILDER(SingleLogoutService);
663 DECL_SAML2MDOBJECTBUILDER(SingleSignOnService);
664 DECL_SAML2MDOBJECTBUILDER(SPSSODescriptor);
665 DECL_SAML2MDOBJECTBUILDER(SurName);
666 DECL_SAML2MDOBJECTBUILDER(TelephoneNumber);
668 DECL_XMLOBJECTBUILDER(SAML_API,ActionNamespace,samlconstants::SAML20MD_QUERY_EXT_NS,samlconstants::SAML20MD_QUERY_EXT_PREFIX);
669 DECL_XMLOBJECTBUILDER(SAML_API,SourceID,samlconstants::SAML1MD_NS,samlconstants::SAML1MD_PREFIX);
670 DECL_XMLOBJECTBUILDER(SAML_API,DiscoveryResponse,samlconstants::IDP_DISCOVERY_PROTOCOL_NS,samlconstants::IDP_DISCOVERY_PROTOCOL_PREFIX);
671 DECL_XMLOBJECTBUILDER(SAML_API,RequestInitiator,samlconstants::SP_REQUEST_INIT_NS,samlconstants::SP_REQUEST_INIT_PREFIX);
672 DECL_XMLOBJECTBUILDER(SAML_API,EntityAttributes,samlconstants::SAML20MD_ENTITY_ATTRIBUTE_NS,samlconstants::SAML20MD_ENTITY_ATTRIBUTE_PREFIX);
673 DECL_XMLOBJECTBUILDER(SAML_API,DigestMethod,samlconstants::SAML20MD_ALGSUPPORT_NS,samlconstants::SAML20MD_ALGSUPPORT_PREFIX);
674 DECL_XMLOBJECTBUILDER(SAML_API,SigningMethod,samlconstants::SAML20MD_ALGSUPPORT_NS,samlconstants::SAML20MD_ALGSUPPORT_PREFIX);
676 DECL_XMLOBJECTBUILDER(SAML_API,UIInfo,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
677 DECL_XMLOBJECTBUILDER(SAML_API,DisplayName,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
678 DECL_XMLOBJECTBUILDER(SAML_API,Description,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
679 DECL_XMLOBJECTBUILDER(SAML_API,Keywords,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
680 DECL_XMLOBJECTBUILDER(SAML_API,Logo,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
681 DECL_XMLOBJECTBUILDER(SAML_API,InformationURL,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
682 DECL_XMLOBJECTBUILDER(SAML_API,PrivacyStatementURL,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
683 DECL_XMLOBJECTBUILDER(SAML_API,DiscoHints,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
684 DECL_XMLOBJECTBUILDER(SAML_API,IPHint,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
685 DECL_XMLOBJECTBUILDER(SAML_API,DomainHint,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
686 DECL_XMLOBJECTBUILDER(SAML_API,GeolocationHint,samlconstants::SAML20MD_UI_NS,samlconstants::SAML20MD_UI_PREFIX);
688 DECL_XMLOBJECTBUILDER(SAML_API, RegistrationInfo, samlconstants::SAML20MD_RPI_NS, samlconstants::SAML20MD_RPI_PREFIX);
689 DECL_XMLOBJECTBUILDER(SAML_API, RegistrationPolicy, samlconstants::SAML20MD_RPI_NS, samlconstants::SAML20MD_RPI_PREFIX);
690 DECL_XMLOBJECTBUILDER(SAML_API, Publication, samlconstants::SAML20MD_RPI_NS, samlconstants::SAML20MD_RPI_PREFIX);
691 DECL_XMLOBJECTBUILDER(SAML_API, PublicationPath, samlconstants::SAML20MD_RPI_NS, samlconstants::SAML20MD_RPI_PREFIX);
692 DECL_XMLOBJECTBUILDER(SAML_API, PublicationInfo, samlconstants::SAML20MD_RPI_NS, samlconstants::SAML20MD_RPI_PREFIX);
693 DECL_XMLOBJECTBUILDER(SAML_API, UsagePolicy, samlconstants::SAML20MD_RPI_NS, samlconstants::SAML20MD_RPI_PREFIX);
696 * Builder for localizedNameType objects.
698 * This is customized to force the element name to be specified.
700 class SAML_API localizedNameTypeBuilder : public xmltooling::XMLObjectBuilder {
702 virtual ~localizedNameTypeBuilder() {}
703 /** Builder that allows element/type override. */
704 #ifdef HAVE_COVARIANT_RETURNS
705 virtual localizedNameType* buildObject(
707 virtual xmltooling::XMLObject* buildObject(
709 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
712 /** Singleton builder. */
713 static localizedNameType* buildlocalizedNameType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
714 const localizedNameTypeBuilder* b = dynamic_cast<const localizedNameTypeBuilder*>(
715 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,localizedNameType::TYPE_NAME))
718 xmltooling::QName schemaType(samlconstants::SAML20MD_NS,localizedNameType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
719 #ifdef HAVE_COVARIANT_RETURNS
720 return b->buildObject(nsURI, localName, prefix, &schemaType);
722 return dynamic_cast<localizedNameType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
725 throw xmltooling::XMLObjectException("Unable to obtain typed builder for localizedNameType.");
730 * Builder for localizedURIType objects.
732 * This is customized to force the element name to be specified.
734 class SAML_API localizedURITypeBuilder : public xmltooling::XMLObjectBuilder {
736 virtual ~localizedURITypeBuilder() {}
737 /** Builder that allows element/type override. */
738 #ifdef HAVE_COVARIANT_RETURNS
739 virtual localizedURIType* buildObject(
741 virtual xmltooling::XMLObject* buildObject(
743 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
746 /** Singleton builder. */
747 static localizedURIType* buildlocalizedURIType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
748 const localizedURITypeBuilder* b = dynamic_cast<const localizedURITypeBuilder*>(
749 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,localizedURIType::TYPE_NAME))
752 xmltooling::QName schemaType(samlconstants::SAML20MD_NS,localizedURIType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
753 #ifdef HAVE_COVARIANT_RETURNS
754 return b->buildObject(nsURI, localName, prefix, &schemaType);
756 return dynamic_cast<localizedURIType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
759 throw xmltooling::XMLObjectException("Unable to obtain typed builder for localizedURIType.");
764 * Builder for EndpointType objects.
766 * This is customized to force the element name to be specified.
768 class SAML_API EndpointTypeBuilder : public xmltooling::XMLObjectBuilder {
770 virtual ~EndpointTypeBuilder() {}
771 /** Builder that allows element/type override. */
772 #ifdef HAVE_COVARIANT_RETURNS
773 virtual EndpointType* buildObject(
775 virtual xmltooling::XMLObject* buildObject(
777 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
780 /** Singleton builder. */
781 static EndpointType* buildEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
782 const EndpointTypeBuilder* b = dynamic_cast<const EndpointTypeBuilder*>(
783 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,EndpointType::TYPE_NAME))
786 xmltooling::QName schemaType(samlconstants::SAML20MD_NS,EndpointType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
787 #ifdef HAVE_COVARIANT_RETURNS
788 return b->buildObject(nsURI, localName, prefix, &schemaType);
790 return dynamic_cast<EndpointType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
793 throw xmltooling::XMLObjectException("Unable to obtain typed builder for EndpointType.");
798 * Builder for IndexedEndpointType objects.
800 * This is customized to force the element name to be specified.
802 class SAML_API IndexedEndpointTypeBuilder : public xmltooling::XMLObjectBuilder {
804 virtual ~IndexedEndpointTypeBuilder() {}
805 /** Builder that allows element/type override. */
806 #ifdef HAVE_COVARIANT_RETURNS
807 virtual IndexedEndpointType* buildObject(
809 virtual xmltooling::XMLObject* buildObject(
811 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
814 /** Singleton builder. */
815 static IndexedEndpointType* buildIndexedEndpointType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr) {
816 const IndexedEndpointTypeBuilder* b = dynamic_cast<const IndexedEndpointTypeBuilder*>(
817 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,IndexedEndpointType::TYPE_NAME))
820 xmltooling::QName schemaType(samlconstants::SAML20MD_NS,IndexedEndpointType::TYPE_NAME,samlconstants::SAML20MD_PREFIX);
821 #ifdef HAVE_COVARIANT_RETURNS
822 return b->buildObject(nsURI, localName, prefix, &schemaType);
824 return dynamic_cast<IndexedEndpointType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
827 throw xmltooling::XMLObjectException("Unable to obtain typed builder for IndexedEndpointType.");
832 * Builder for RoleDescriptor extension objects.
834 * This is customized to force the schema type to be specified.
836 class SAML_API RoleDescriptorBuilder : public xmltooling::XMLObjectBuilder {
838 virtual ~RoleDescriptorBuilder() {}
839 /** Builder that allows element/type override. */
840 #ifdef HAVE_COVARIANT_RETURNS
841 virtual RoleDescriptor* buildObject(
843 virtual xmltooling::XMLObject* buildObject(
845 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
848 /** Singleton builder. */
849 static RoleDescriptor* buildRoleDescriptor(const xmltooling::QName& schemaType) {
850 const RoleDescriptorBuilder* b = dynamic_cast<const RoleDescriptorBuilder*>(
851 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_NS,RoleDescriptor::LOCAL_NAME))
854 #ifdef HAVE_COVARIANT_RETURNS
855 return b->buildObject(samlconstants::SAML20MD_NS, RoleDescriptor::LOCAL_NAME, samlconstants::SAML20MD_PREFIX, &schemaType);
857 return dynamic_cast<RoleDescriptor*>(b->buildObject(samlconstants::SAML20MD_NS, RoleDescriptor::LOCAL_NAME, samlconstants::SAML20MD_PREFIX, &schemaType));
860 throw xmltooling::XMLObjectException("Unable to obtain typed builder for RoleDescriptor.");
865 * Builder for AuthnQueryDescriptorType objects.
867 * This is customized to return a RoleDescriptor element with an
868 * xsi:type of AuthnQueryDescriptorType.
870 class SAML_API AuthnQueryDescriptorTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
872 virtual ~AuthnQueryDescriptorTypeBuilder() {}
873 /** Default builder. */
874 #ifdef HAVE_COVARIANT_RETURNS
875 virtual AuthnQueryDescriptorType* buildObject() const {
877 virtual xmltooling::XMLObject* buildObject() const {
879 xmltooling::QName schemaType(
880 samlconstants::SAML20MD_QUERY_EXT_NS,AuthnQueryDescriptorType::TYPE_NAME,samlconstants::SAML20MD_QUERY_EXT_PREFIX
883 samlconstants::SAML20MD_NS,AuthnQueryDescriptorType::LOCAL_NAME,samlconstants::SAML20MD_PREFIX,&schemaType
886 /** Builder that allows element/type override. */
887 #ifdef HAVE_COVARIANT_RETURNS
888 virtual AuthnQueryDescriptorType* buildObject(
890 virtual xmltooling::XMLObject* buildObject(
892 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
895 /** Singleton builder. */
896 static AuthnQueryDescriptorType* buildAuthnQueryDescriptorType() {
897 const AuthnQueryDescriptorTypeBuilder* b = dynamic_cast<const AuthnQueryDescriptorTypeBuilder*>(
898 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_QUERY_EXT_NS,AuthnQueryDescriptorType::TYPE_NAME))
901 #ifdef HAVE_COVARIANT_RETURNS
902 return b->buildObject();
904 return dynamic_cast<AuthnQueryDescriptorType*>(b->buildObject());
907 throw xmltooling::XMLObjectException("Unable to obtain typed builder for AuthnQueryDescriptorType.");
912 * Builder for AttributeQueryDescriptorType objects.
914 * This is customized to return a RoleDescriptor element with an
915 * xsi:type of AttributeQueryDescriptorType.
917 class SAML_API AttributeQueryDescriptorTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
919 virtual ~AttributeQueryDescriptorTypeBuilder() {}
920 /** Default builder. */
921 #ifdef HAVE_COVARIANT_RETURNS
922 virtual AttributeQueryDescriptorType* buildObject() const {
924 virtual xmltooling::XMLObject* buildObject() const {
926 xmltooling::QName schemaType(
927 samlconstants::SAML20MD_QUERY_EXT_NS,AttributeQueryDescriptorType::TYPE_NAME,samlconstants::SAML20MD_QUERY_EXT_PREFIX
930 samlconstants::SAML20MD_NS,AttributeQueryDescriptorType::LOCAL_NAME,samlconstants::SAML20MD_PREFIX,&schemaType
933 /** Builder that allows element/type override. */
934 #ifdef HAVE_COVARIANT_RETURNS
935 virtual AttributeQueryDescriptorType* buildObject(
937 virtual xmltooling::XMLObject* buildObject(
939 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
942 /** Singleton builder. */
943 static AttributeQueryDescriptorType* buildAttributeQueryDescriptorType() {
944 const AttributeQueryDescriptorTypeBuilder* b = dynamic_cast<const AttributeQueryDescriptorTypeBuilder*>(
945 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_QUERY_EXT_NS,AttributeQueryDescriptorType::TYPE_NAME))
948 #ifdef HAVE_COVARIANT_RETURNS
949 return b->buildObject();
951 return dynamic_cast<AttributeQueryDescriptorType*>(b->buildObject());
954 throw xmltooling::XMLObjectException("Unable to obtain typed builder for AttributeQueryDescriptorType.");
959 * Builder for AuthzDecisionQueryDescriptorType objects.
961 * This is customized to return a RoleDescriptor element with an
962 * xsi:type of AuthzDecisionQueryDescriptorType.
964 class SAML_API AuthzDecisionQueryDescriptorTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
966 virtual ~AuthzDecisionQueryDescriptorTypeBuilder() {}
967 /** Default builder. */
968 #ifdef HAVE_COVARIANT_RETURNS
969 virtual AuthzDecisionQueryDescriptorType* buildObject() const {
971 virtual xmltooling::XMLObject* buildObject() const {
973 xmltooling::QName schemaType(
974 samlconstants::SAML20MD_QUERY_EXT_NS,AuthzDecisionQueryDescriptorType::TYPE_NAME,samlconstants::SAML20MD_QUERY_EXT_PREFIX
977 samlconstants::SAML20MD_NS,AuthzDecisionQueryDescriptorType::LOCAL_NAME,samlconstants::SAML20MD_PREFIX,&schemaType
980 /** Builder that allows element/type override. */
981 #ifdef HAVE_COVARIANT_RETURNS
982 virtual AuthzDecisionQueryDescriptorType* buildObject(
984 virtual xmltooling::XMLObject* buildObject(
986 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
989 /** Singleton builder. */
990 static AuthzDecisionQueryDescriptorType* buildAuthzDecisionQueryDescriptorType() {
991 const AuthzDecisionQueryDescriptorTypeBuilder* b = dynamic_cast<const AuthzDecisionQueryDescriptorTypeBuilder*>(
992 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20MD_QUERY_EXT_NS,AuthzDecisionQueryDescriptorType::TYPE_NAME))
995 #ifdef HAVE_COVARIANT_RETURNS
996 return b->buildObject();
998 return dynamic_cast<AuthzDecisionQueryDescriptorType*>(b->buildObject());
1001 throw xmltooling::XMLObjectException("Unable to obtain typed builder for AuthzDecisionQueryDescriptorType.");
1006 * Registers builders and validators for SAML 2.0 Metadata classes into the runtime.
1008 void SAML_API registerMetadataClasses();
1012 #endif /* __saml2_metadata_h__ */