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 * MetadataSchemaValidators.cpp
24 * Schema-based validators for SAML 2.0 Metadata classes.
28 #include "exceptions.h"
29 #include "saml2/metadata/Metadata.h"
31 #include <xmltooling/encryption/Encryption.h>
32 #include <xmltooling/validation/Validator.h>
33 #include <xmltooling/validation/ValidatorSuite.h>
35 using namespace opensaml::saml2md;
36 using namespace opensaml::saml2;
37 using namespace opensaml;
38 using namespace xmltooling;
40 using samlconstants::SAML20MD_NS;
41 using samlconstants::SAML20MD_QUERY_EXT_NS;
42 using samlconstants::SAML20MD_ALGSUPPORT_NS;
43 using samlconstants::SAML20MD_ENTITY_ATTRIBUTE_NS;
44 using samlconstants::SAML20MD_UI_NS;
45 using samlconstants::SAML20MD_RPI_NS;
46 using samlconstants::SAML1MD_NS;
47 using samlconstants::IDP_DISCOVERY_PROTOCOL_NS;
48 using samlconstants::SP_REQUEST_INIT_NS;
53 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,ActionNamespace);
54 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,AffiliateMember);
55 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,AttributeProfile);
56 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,Company);
57 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,EmailAddress);
58 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,GivenName);
59 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,NameIDFormat);
60 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,SurName);
61 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,TelephoneNumber);
63 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,localizedNameType);
64 XMLOBJECTVALIDATOR_REQUIRE(localizedNameType,TextContent);
65 XMLOBJECTVALIDATOR_REQUIRE(localizedNameType,Lang);
66 END_XMLOBJECTVALIDATOR;
68 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,localizedURIType);
69 XMLOBJECTVALIDATOR_REQUIRE(localizedURIType,TextContent);
70 XMLOBJECTVALIDATOR_REQUIRE(localizedURIType,Lang);
71 END_XMLOBJECTVALIDATOR;
73 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,OrganizationName);
74 XMLOBJECTVALIDATOR_REQUIRE(OrganizationName,TextContent);
75 XMLOBJECTVALIDATOR_REQUIRE(OrganizationName,Lang);
76 END_XMLOBJECTVALIDATOR;
78 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,OrganizationDisplayName);
79 XMLOBJECTVALIDATOR_REQUIRE(OrganizationDisplayName,TextContent);
80 XMLOBJECTVALIDATOR_REQUIRE(OrganizationDisplayName,Lang);
81 END_XMLOBJECTVALIDATOR;
83 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,OrganizationURL);
84 XMLOBJECTVALIDATOR_REQUIRE(OrganizationURL,TextContent);
85 XMLOBJECTVALIDATOR_REQUIRE(OrganizationURL,Lang);
86 END_XMLOBJECTVALIDATOR;
88 class SAML_DLLLOCAL checkWildcardNS {
90 void operator()(const XMLObject* xmlObject) const {
91 const XMLCh* ns=xmlObject->getElementQName().getNamespaceURI();
92 if (XMLString::equals(ns,SAML20MD_NS) || !ns || !*ns) {
93 throw ValidationException(
94 "Object contains an illegal extension child element ($1).",
95 params(1,xmlObject->getElementQName().toString().c_str())
101 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Extensions);
102 if (!ptr->hasChildren())
103 throw ValidationException("Extensions must have at least one child element.");
104 const vector<XMLObject*>& anys=ptr->getUnknownXMLObjects();
105 for_each(anys.begin(),anys.end(),checkWildcardNS());
106 END_XMLOBJECTVALIDATOR;
108 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Organization);
109 XMLOBJECTVALIDATOR_NONEMPTY(Organization,OrganizationName);
110 XMLOBJECTVALIDATOR_NONEMPTY(Organization,OrganizationDisplayName);
111 XMLOBJECTVALIDATOR_NONEMPTY(Organization,OrganizationURL);
112 END_XMLOBJECTVALIDATOR;
114 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,ContactPerson);
115 /* Pending errata decision.
116 if (!ptr->hasChildren())
117 throw ValidationException("ContactPerson must have at least one child element.");
119 if (!XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_TECHNICAL) &&
120 !XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_SUPPORT) &&
121 !XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_ADMINISTRATIVE) &&
122 !XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_BILLING) &&
123 !XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_OTHER))
124 throw ValidationException("ContactPerson contactType must be one of the defined values.");
125 END_XMLOBJECTVALIDATOR;
127 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,AdditionalMetadataLocation);
128 XMLOBJECTVALIDATOR_REQUIRE(AdditionalMetadataLocation,Namespace);
129 XMLOBJECTVALIDATOR_REQUIRE(AdditionalMetadataLocation,Location);
130 END_XMLOBJECTVALIDATOR;
132 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,KeyDescriptor);
133 XMLOBJECTVALIDATOR_REQUIRE(KeyDescriptor,KeyInfo);
135 !XMLString::equals(ptr->getUse(),KeyDescriptor::KEYTYPE_ENCRYPTION) &&
136 !XMLString::equals(ptr->getUse(),KeyDescriptor::KEYTYPE_SIGNING))
137 throw ValidationException("KeyDescriptor use must be empty or one of the defined values.");
138 END_XMLOBJECTVALIDATOR;
140 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,RoleDescriptor);
141 XMLOBJECTVALIDATOR_REQUIRE(RoleDescriptor,ProtocolSupportEnumeration);
142 END_XMLOBJECTVALIDATOR;
144 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,EndpointType);
145 XMLOBJECTVALIDATOR_REQUIRE(EndpointType,Binding);
146 XMLOBJECTVALIDATOR_REQUIRE(EndpointType,Location);
147 const vector<XMLObject*>& anys=ptr->getUnknownXMLObjects();
148 for_each(anys.begin(),anys.end(),checkWildcardNS());
149 END_XMLOBJECTVALIDATOR;
151 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,IndexedEndpointType,EndpointType);
152 EndpointTypeSchemaValidator::validate(xmlObject);
153 XMLOBJECTVALIDATOR_REQUIRE_INTEGER(IndexedEndpointType,Index);
154 END_XMLOBJECTVALIDATOR;
156 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,ArtifactResolutionService,IndexedEndpointType);
157 IndexedEndpointTypeSchemaValidator::validate(xmlObject);
158 END_XMLOBJECTVALIDATOR;
160 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,SingleLogoutService,EndpointType);
161 EndpointTypeSchemaValidator::validate(xmlObject);
162 END_XMLOBJECTVALIDATOR;
164 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,ManageNameIDService,EndpointType);
165 EndpointTypeSchemaValidator::validate(xmlObject);
166 END_XMLOBJECTVALIDATOR;
168 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,SingleSignOnService,EndpointType);
169 EndpointTypeSchemaValidator::validate(xmlObject);
170 END_XMLOBJECTVALIDATOR;
172 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,NameIDMappingService,EndpointType);
173 EndpointTypeSchemaValidator::validate(xmlObject);
174 END_XMLOBJECTVALIDATOR;
176 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AssertionIDRequestService,EndpointType);
177 EndpointTypeSchemaValidator::validate(xmlObject);
178 END_XMLOBJECTVALIDATOR;
180 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,IDPSSODescriptor,RoleDescriptor);
181 RoleDescriptorSchemaValidator::validate(xmlObject);
182 XMLOBJECTVALIDATOR_NONEMPTY(IDPSSODescriptor,SingleSignOnService);
183 END_XMLOBJECTVALIDATOR;
185 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,ServiceName);
186 XMLOBJECTVALIDATOR_REQUIRE(ServiceName,TextContent);
187 XMLOBJECTVALIDATOR_REQUIRE(ServiceName,Lang);
188 END_XMLOBJECTVALIDATOR;
190 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,ServiceDescription);
191 XMLOBJECTVALIDATOR_REQUIRE(ServiceDescription,TextContent);
192 XMLOBJECTVALIDATOR_REQUIRE(ServiceDescription,Lang);
193 END_XMLOBJECTVALIDATOR;
195 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,RequestedAttribute);
196 XMLOBJECTVALIDATOR_REQUIRE(RequestedAttribute,Name);
197 END_XMLOBJECTVALIDATOR;
199 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,AttributeConsumingService);
200 XMLOBJECTVALIDATOR_REQUIRE_INTEGER(AttributeConsumingService,Index);
201 XMLOBJECTVALIDATOR_NONEMPTY(AttributeConsumingService,ServiceName);
202 XMLOBJECTVALIDATOR_NONEMPTY(AttributeConsumingService,RequestedAttribute);
203 END_XMLOBJECTVALIDATOR;
205 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AssertionConsumerService,IndexedEndpointType);
206 IndexedEndpointTypeSchemaValidator::validate(xmlObject);
207 END_XMLOBJECTVALIDATOR;
209 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,SPSSODescriptor,RoleDescriptor);
210 RoleDescriptorSchemaValidator::validate(xmlObject);
211 XMLOBJECTVALIDATOR_NONEMPTY(SPSSODescriptor,AssertionConsumerService);
212 END_XMLOBJECTVALIDATOR;
214 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AuthnQueryService,EndpointType);
215 EndpointTypeSchemaValidator::validate(xmlObject);
216 END_XMLOBJECTVALIDATOR;
218 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AuthnAuthorityDescriptor,RoleDescriptor);
219 RoleDescriptorSchemaValidator::validate(xmlObject);
220 XMLOBJECTVALIDATOR_NONEMPTY(AuthnAuthorityDescriptor,AuthnQueryService);
221 END_XMLOBJECTVALIDATOR;
223 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AuthzService,EndpointType);
224 EndpointTypeSchemaValidator::validate(xmlObject);
225 END_XMLOBJECTVALIDATOR;
227 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,PDPDescriptor,RoleDescriptor);
228 RoleDescriptorSchemaValidator::validate(xmlObject);
229 XMLOBJECTVALIDATOR_NONEMPTY(PDPDescriptor,AuthzService);
230 END_XMLOBJECTVALIDATOR;
232 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AttributeService,EndpointType);
233 EndpointTypeSchemaValidator::validate(xmlObject);
234 END_XMLOBJECTVALIDATOR;
236 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AttributeAuthorityDescriptor,RoleDescriptor);
237 RoleDescriptorSchemaValidator::validate(xmlObject);
238 XMLOBJECTVALIDATOR_NONEMPTY(AttributeAuthorityDescriptor,AttributeService);
239 END_XMLOBJECTVALIDATOR;
241 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,AffiliationDescriptor);
242 XMLOBJECTVALIDATOR_REQUIRE(AffiliationDescriptor,AffiliationOwnerID);
243 XMLOBJECTVALIDATOR_NONEMPTY(AffiliationDescriptor,AffiliateMember);
244 END_XMLOBJECTVALIDATOR;
246 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,EntityDescriptor);
247 XMLOBJECTVALIDATOR_REQUIRE(EntityDescriptor,EntityID);
248 if (ptr->getRoleDescriptors().empty() &&
249 ptr->getIDPSSODescriptors().empty() &&
250 ptr->getSPSSODescriptors().empty() &&
251 ptr->getAuthnAuthorityDescriptors().empty() &&
252 ptr->getAttributeAuthorityDescriptors().empty() &&
253 ptr->getPDPDescriptors().empty()) {
255 if (!ptr->getAffiliationDescriptor())
256 throw ValidationException("EntityDescriptor must have at least one child role or affiliation descriptor.");
258 else if (ptr->getAffiliationDescriptor()) {
259 throw ValidationException("EntityDescriptor cannot have both an AffiliationDescriptor and role descriptors.");
261 END_XMLOBJECTVALIDATOR;
263 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,EntitiesDescriptor);
264 if (ptr->getEntityDescriptors().empty() && ptr->getEntitiesDescriptors().empty())
265 throw ValidationException("EntitiesDescriptor must contain at least one child descriptor.");
266 END_XMLOBJECTVALIDATOR;
268 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,SourceID);
270 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,DiscoveryResponse,IndexedEndpointType);
271 IndexedEndpointTypeSchemaValidator::validate(xmlObject);
272 END_XMLOBJECTVALIDATOR;
274 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,RequestInitiator,EndpointType);
275 EndpointTypeSchemaValidator::validate(xmlObject);
276 END_XMLOBJECTVALIDATOR;
278 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,EntityAttributes);
279 if (!ptr->hasChildren())
280 throw ValidationException("EntityAttributes must contain at least one child element.");
281 END_XMLOBJECTVALIDATOR;
283 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,DigestMethod);
284 XMLOBJECTVALIDATOR_REQUIRE(DigestMethod,Algorithm);
285 END_XMLOBJECTVALIDATOR;
287 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,SigningMethod);
288 XMLOBJECTVALIDATOR_REQUIRE(SigningMethod,Algorithm);
289 END_XMLOBJECTVALIDATOR;
291 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,DisplayName);
292 XMLOBJECTVALIDATOR_REQUIRE(DisplayName,TextContent);
293 XMLOBJECTVALIDATOR_REQUIRE(DisplayName,Lang);
294 END_XMLOBJECTVALIDATOR;
296 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Description);
297 XMLOBJECTVALIDATOR_REQUIRE(Description,TextContent);
298 XMLOBJECTVALIDATOR_REQUIRE(Description,Lang);
299 END_XMLOBJECTVALIDATOR;
301 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Keywords);
302 XMLOBJECTVALIDATOR_REQUIRE(Keywords,TextContent);
303 XMLOBJECTVALIDATOR_REQUIRE(Keywords,Lang);
304 END_XMLOBJECTVALIDATOR;
306 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Logo);
307 XMLOBJECTVALIDATOR_REQUIRE(Logo,TextContent);
308 XMLOBJECTVALIDATOR_REQUIRE_INTEGER(Logo,Height);
309 XMLOBJECTVALIDATOR_REQUIRE_INTEGER(Logo,Width);
310 END_XMLOBJECTVALIDATOR;
312 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,InformationURL);
313 XMLOBJECTVALIDATOR_REQUIRE(InformationURL,TextContent);
314 XMLOBJECTVALIDATOR_REQUIRE(InformationURL,Lang);
315 END_XMLOBJECTVALIDATOR;
317 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,PrivacyStatementURL);
318 XMLOBJECTVALIDATOR_REQUIRE(PrivacyStatementURL,TextContent);
319 XMLOBJECTVALIDATOR_REQUIRE(PrivacyStatementURL,Lang);
320 END_XMLOBJECTVALIDATOR;
322 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,IPHint);
323 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,DomainHint);
324 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,GeolocationHint);
326 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,RegistrationInfo);
327 XMLOBJECTVALIDATOR_REQUIRE(RegistrationInfo,RegistrationAuthority);
328 END_XMLOBJECTVALIDATOR;
330 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,PublicationInfo);
331 XMLOBJECTVALIDATOR_REQUIRE(PublicationInfo,Publisher);
332 END_XMLOBJECTVALIDATOR;
334 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Publication);
335 XMLOBJECTVALIDATOR_REQUIRE(Publication,Publisher);
336 END_XMLOBJECTVALIDATOR;
338 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,RegistrationPolicy);
339 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,UsagePolicy);
343 #define REGISTER_ELEMENT(cname) \
344 q=xmltooling::QName(SAML20MD_NS,cname::LOCAL_NAME); \
345 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
346 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
348 #define REGISTER_TYPE(cname) \
349 q=xmltooling::QName(SAML20MD_NS,cname::TYPE_NAME); \
350 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
351 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
353 #define REGISTER_ELEMENT_UI(cname) \
354 q=xmltooling::QName(SAML20MD_UI_NS,cname::LOCAL_NAME); \
355 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
356 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
358 #define REGISTER_TYPE_UI(cname) \
359 q=xmltooling::QName(SAML20MD_UI_NS,cname::TYPE_NAME); \
360 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
361 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
363 #define REGISTER_ELEMENT_UI_NOVAL(cname) \
364 q=xmltooling::QName(SAML20MD_UI_NS,cname::LOCAL_NAME); \
365 XMLObjectBuilder::registerBuilder(q,new cname##Builder());
367 #define REGISTER_TYPE_UI_NOVAL(cname) \
368 q=xmltooling::QName(SAML20MD_UI_NS,cname::TYPE_NAME); \
369 XMLObjectBuilder::registerBuilder(q,new cname##Builder());
371 #define REGISTER_ELEMENT_RPI(cname) \
372 q=xmltooling::QName(SAML20MD_RPI_NS,cname::LOCAL_NAME); \
373 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
374 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
376 #define REGISTER_TYPE_RPI(cname) \
377 q=xmltooling::QName(SAML20MD_RPI_NS,cname::TYPE_NAME); \
378 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
379 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
381 #define REGISTER_ELEMENT_RPI_NOVAL(cname) \
382 q=xmltooling::QName(SAML20MD_RPI_NS,cname::LOCAL_NAME); \
383 XMLObjectBuilder::registerBuilder(q,new cname##Builder());
385 #define REGISTER_TYPE_RPI_NOVAL(cname) \
386 q=xmltooling::QName(SAML20MD_RPI_NS,cname::TYPE_NAME); \
387 XMLObjectBuilder::registerBuilder(q,new cname##Builder());
389 void opensaml::saml2md::registerMetadataClasses() {
391 REGISTER_ELEMENT(AdditionalMetadataLocation);
392 REGISTER_ELEMENT(AffiliateMember);
393 REGISTER_ELEMENT(AffiliationDescriptor);
394 REGISTER_ELEMENT(ArtifactResolutionService);
395 REGISTER_ELEMENT(AssertionConsumerService);
396 REGISTER_ELEMENT(AssertionIDRequestService);
397 REGISTER_ELEMENT(AttributeAuthorityDescriptor);;
398 REGISTER_ELEMENT(AttributeConsumingService);
399 REGISTER_ELEMENT(AttributeProfile);
400 REGISTER_ELEMENT(AttributeService);
401 REGISTER_ELEMENT(AuthnAuthorityDescriptor);
402 REGISTER_ELEMENT(AuthnQueryService);
403 REGISTER_ELEMENT(AuthzService);
404 REGISTER_ELEMENT(Company);
405 REGISTER_ELEMENT(ContactPerson);
406 REGISTER_ELEMENT(EmailAddress);
407 REGISTER_ELEMENT(EntitiesDescriptor);
408 REGISTER_ELEMENT(EntityDescriptor);
409 REGISTER_ELEMENT(Extensions);
410 REGISTER_ELEMENT(GivenName);
411 REGISTER_ELEMENT(IDPSSODescriptor);
412 REGISTER_ELEMENT(KeyDescriptor);
413 REGISTER_ELEMENT(ManageNameIDService);
414 REGISTER_ELEMENT(NameIDFormat);
415 REGISTER_ELEMENT(NameIDMappingService);
416 REGISTER_ELEMENT(Organization);
417 REGISTER_ELEMENT(OrganizationDisplayName);
418 REGISTER_ELEMENT(OrganizationName);
419 REGISTER_ELEMENT(OrganizationURL);
420 REGISTER_ELEMENT(PDPDescriptor);
421 REGISTER_ELEMENT(RequestedAttribute);
422 REGISTER_ELEMENT(RoleDescriptor);
423 REGISTER_ELEMENT(ServiceDescription);
424 REGISTER_ELEMENT(ServiceName);
425 REGISTER_ELEMENT(SingleLogoutService);
426 REGISTER_ELEMENT(SingleSignOnService);
427 REGISTER_ELEMENT(SPSSODescriptor);
428 REGISTER_ELEMENT(SurName);
429 REGISTER_ELEMENT(TelephoneNumber);
430 REGISTER_TYPE(AdditionalMetadataLocation);
431 REGISTER_TYPE(AffiliationDescriptor);
432 REGISTER_TYPE(AttributeAuthorityDescriptor);;
433 REGISTER_TYPE(AttributeConsumingService);
434 REGISTER_TYPE(AuthnAuthorityDescriptor);
435 REGISTER_TYPE(ContactPerson);
436 REGISTER_TYPE(EndpointType);
437 REGISTER_TYPE(EntitiesDescriptor);
438 REGISTER_TYPE(EntityDescriptor);
439 REGISTER_TYPE(Extensions);
440 REGISTER_TYPE(IDPSSODescriptor);
441 REGISTER_TYPE(IndexedEndpointType);
442 REGISTER_TYPE(KeyDescriptor);
443 REGISTER_TYPE(localizedNameType);
444 REGISTER_TYPE(localizedURIType);
445 REGISTER_TYPE(Organization);
446 REGISTER_TYPE(PDPDescriptor);
447 REGISTER_TYPE(RequestedAttribute);
448 REGISTER_TYPE(SPSSODescriptor);
450 q=xmltooling::QName(SAML20MD_NS,xmlencryption::EncryptionMethod::LOCAL_NAME);
451 XMLObjectBuilder::registerBuilder(q,new xmlencryption::EncryptionMethodBuilder());
453 q=xmltooling::QName(SAML1MD_NS,SourceID::LOCAL_NAME);
454 XMLObjectBuilder::registerBuilder(q,new SourceIDBuilder());
455 SchemaValidators.registerValidator(q,new SourceIDSchemaValidator());
457 q=xmltooling::QName(IDP_DISCOVERY_PROTOCOL_NS,DiscoveryResponse::LOCAL_NAME);
458 XMLObjectBuilder::registerBuilder(q,new DiscoveryResponseBuilder());
459 SchemaValidators.registerValidator(q,new DiscoveryResponseSchemaValidator());
461 q=xmltooling::QName(SP_REQUEST_INIT_NS,RequestInitiator::LOCAL_NAME);
462 XMLObjectBuilder::registerBuilder(q,new RequestInitiatorBuilder());
463 SchemaValidators.registerValidator(q,new RequestInitiatorSchemaValidator());
465 q=xmltooling::QName(SAML20MD_QUERY_EXT_NS,ActionNamespace::LOCAL_NAME);
466 XMLObjectBuilder::registerBuilder(q,new ActionNamespaceBuilder());
467 SchemaValidators.registerValidator(q,new ActionNamespaceSchemaValidator());
469 q=xmltooling::QName(SAML20MD_QUERY_EXT_NS,AuthnQueryDescriptorType::TYPE_NAME);
470 XMLObjectBuilder::registerBuilder(q,new AuthnQueryDescriptorTypeBuilder());
471 SchemaValidators.registerValidator(q,new RoleDescriptorSchemaValidator());
473 q=xmltooling::QName(SAML20MD_QUERY_EXT_NS,AttributeQueryDescriptorType::TYPE_NAME);
474 XMLObjectBuilder::registerBuilder(q,new AttributeQueryDescriptorTypeBuilder());
475 SchemaValidators.registerValidator(q,new RoleDescriptorSchemaValidator());
477 q=xmltooling::QName(SAML20MD_QUERY_EXT_NS,AuthzDecisionQueryDescriptorType::TYPE_NAME);
478 XMLObjectBuilder::registerBuilder(q,new AuthzDecisionQueryDescriptorTypeBuilder());
479 SchemaValidators.registerValidator(q,new RoleDescriptorSchemaValidator());
481 q=xmltooling::QName(SAML20MD_ENTITY_ATTRIBUTE_NS,EntityAttributes::LOCAL_NAME);
482 XMLObjectBuilder::registerBuilder(q,new EntityAttributesBuilder());
483 SchemaValidators.registerValidator(q,new EntityAttributesSchemaValidator());
485 q=xmltooling::QName(SAML20MD_ENTITY_ATTRIBUTE_NS,EntityAttributes::TYPE_NAME);
486 XMLObjectBuilder::registerBuilder(q,new EntityAttributesBuilder());
487 SchemaValidators.registerValidator(q,new EntityAttributesSchemaValidator());
489 q=xmltooling::QName(SAML20MD_ALGSUPPORT_NS,DigestMethod::LOCAL_NAME);
490 XMLObjectBuilder::registerBuilder(q,new DigestMethodBuilder());
491 SchemaValidators.registerValidator(q,new DigestMethodSchemaValidator());
493 q=xmltooling::QName(SAML20MD_ALGSUPPORT_NS,DigestMethod::TYPE_NAME);
494 XMLObjectBuilder::registerBuilder(q,new DigestMethodBuilder());
495 SchemaValidators.registerValidator(q,new DigestMethodSchemaValidator());
497 q=xmltooling::QName(SAML20MD_ALGSUPPORT_NS,SigningMethod::LOCAL_NAME);
498 XMLObjectBuilder::registerBuilder(q,new SigningMethodBuilder());
499 SchemaValidators.registerValidator(q,new SigningMethodSchemaValidator());
501 q=xmltooling::QName(SAML20MD_ALGSUPPORT_NS,SigningMethod::TYPE_NAME);
502 XMLObjectBuilder::registerBuilder(q,new SigningMethodBuilder());
503 SchemaValidators.registerValidator(q,new SigningMethodSchemaValidator());
505 REGISTER_ELEMENT_UI(DisplayName);
506 REGISTER_ELEMENT_UI(Description);
507 REGISTER_ELEMENT_UI(Keywords);
508 REGISTER_ELEMENT_UI(Logo);
509 REGISTER_ELEMENT_UI(InformationURL);
510 REGISTER_ELEMENT_UI(PrivacyStatementURL);
511 REGISTER_ELEMENT_UI(IPHint);
512 REGISTER_ELEMENT_UI(DomainHint);
513 REGISTER_ELEMENT_UI(GeolocationHint);
514 REGISTER_TYPE_UI(Keywords);
515 REGISTER_TYPE_UI(Logo);
516 REGISTER_ELEMENT_UI_NOVAL(UIInfo);
517 REGISTER_ELEMENT_UI_NOVAL(DiscoHints);
518 REGISTER_TYPE_UI_NOVAL(UIInfo);
519 REGISTER_TYPE_UI_NOVAL(DiscoHints);
521 REGISTER_ELEMENT_RPI(RegistrationInfo);
522 REGISTER_ELEMENT_RPI(RegistrationPolicy);
523 REGISTER_ELEMENT_RPI(PublicationInfo);
524 REGISTER_ELEMENT_RPI(UsagePolicy);
525 REGISTER_ELEMENT_RPI(Publication);
526 REGISTER_TYPE_RPI(RegistrationInfo);
527 REGISTER_TYPE_RPI(PublicationInfo);
528 REGISTER_TYPE_RPI(Publication);
529 REGISTER_ELEMENT_RPI_NOVAL(PublicationPath);
530 REGISTER_TYPE_RPI_NOVAL(PublicationPath);