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 * MetadataSchemaValidators.cpp
20 * Schema-based validators for SAML 2.0 Metadata classes.
24 #include "exceptions.h"
25 #include "saml2/metadata/Metadata.h"
27 #include <xmltooling/encryption/Encryption.h>
28 #include <xmltooling/validation/Validator.h>
29 #include <xmltooling/validation/ValidatorSuite.h>
31 using namespace opensaml::saml2md;
32 using namespace opensaml::saml2;
33 using namespace opensaml;
34 using namespace xmltooling;
36 using samlconstants::SAML20MD_NS;
37 using samlconstants::SAML20MD_QUERY_EXT_NS;
38 using samlconstants::SAML20MD_ALGSUPPORT_NS;
39 using samlconstants::SAML20MD_ENTITY_ATTRIBUTE_NS;
40 using samlconstants::SAML20MD_UI_NS;
45 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,ActionNamespace);
46 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,AffiliateMember);
47 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,AttributeProfile);
48 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,Company);
49 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,EmailAddress);
50 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,GivenName);
51 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,NameIDFormat);
52 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,SurName);
53 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,TelephoneNumber);
55 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,localizedNameType);
56 XMLOBJECTVALIDATOR_REQUIRE(localizedNameType,TextContent);
57 XMLOBJECTVALIDATOR_REQUIRE(localizedNameType,Lang);
58 END_XMLOBJECTVALIDATOR;
60 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,localizedURIType);
61 XMLOBJECTVALIDATOR_REQUIRE(localizedURIType,TextContent);
62 XMLOBJECTVALIDATOR_REQUIRE(localizedURIType,Lang);
63 END_XMLOBJECTVALIDATOR;
65 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,OrganizationName);
66 XMLOBJECTVALIDATOR_REQUIRE(OrganizationName,TextContent);
67 XMLOBJECTVALIDATOR_REQUIRE(OrganizationName,Lang);
68 END_XMLOBJECTVALIDATOR;
70 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,OrganizationDisplayName);
71 XMLOBJECTVALIDATOR_REQUIRE(OrganizationDisplayName,TextContent);
72 XMLOBJECTVALIDATOR_REQUIRE(OrganizationDisplayName,Lang);
73 END_XMLOBJECTVALIDATOR;
75 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,OrganizationURL);
76 XMLOBJECTVALIDATOR_REQUIRE(OrganizationURL,TextContent);
77 XMLOBJECTVALIDATOR_REQUIRE(OrganizationURL,Lang);
78 END_XMLOBJECTVALIDATOR;
80 class SAML_DLLLOCAL checkWildcardNS {
82 void operator()(const XMLObject* xmlObject) const {
83 const XMLCh* ns=xmlObject->getElementQName().getNamespaceURI();
84 if (XMLString::equals(ns,SAML20MD_NS) || !ns || !*ns) {
85 throw ValidationException(
86 "Object contains an illegal extension child element ($1).",
87 params(1,xmlObject->getElementQName().toString().c_str())
93 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Extensions);
94 if (!ptr->hasChildren())
95 throw ValidationException("Extensions must have at least one child element.");
96 const vector<XMLObject*>& anys=ptr->getUnknownXMLObjects();
97 for_each(anys.begin(),anys.end(),checkWildcardNS());
98 END_XMLOBJECTVALIDATOR;
100 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Organization);
101 XMLOBJECTVALIDATOR_NONEMPTY(Organization,OrganizationName);
102 XMLOBJECTVALIDATOR_NONEMPTY(Organization,OrganizationDisplayName);
103 XMLOBJECTVALIDATOR_NONEMPTY(Organization,OrganizationURL);
104 END_XMLOBJECTVALIDATOR;
106 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,ContactPerson);
107 /* Pending errata decision.
108 if (!ptr->hasChildren())
109 throw ValidationException("ContactPerson must have at least one child element.");
111 if (!XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_TECHNICAL) &&
112 !XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_SUPPORT) &&
113 !XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_ADMINISTRATIVE) &&
114 !XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_BILLING) &&
115 !XMLString::equals(ptr->getContactType(),ContactPerson::CONTACT_OTHER))
116 throw ValidationException("ContactPerson contactType must be one of the defined values.");
117 END_XMLOBJECTVALIDATOR;
119 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,AdditionalMetadataLocation);
120 XMLOBJECTVALIDATOR_REQUIRE(AdditionalMetadataLocation,Namespace);
121 XMLOBJECTVALIDATOR_REQUIRE(AdditionalMetadataLocation,Location);
122 END_XMLOBJECTVALIDATOR;
124 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,KeyDescriptor);
125 XMLOBJECTVALIDATOR_REQUIRE(KeyDescriptor,KeyInfo);
127 !XMLString::equals(ptr->getUse(),KeyDescriptor::KEYTYPE_ENCRYPTION) &&
128 !XMLString::equals(ptr->getUse(),KeyDescriptor::KEYTYPE_SIGNING))
129 throw ValidationException("KeyDescriptor use must be empty or one of the defined values.");
130 END_XMLOBJECTVALIDATOR;
132 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,RoleDescriptor);
133 XMLOBJECTVALIDATOR_REQUIRE(RoleDescriptor,ProtocolSupportEnumeration);
134 END_XMLOBJECTVALIDATOR;
136 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,EndpointType);
137 XMLOBJECTVALIDATOR_REQUIRE(EndpointType,Binding);
138 XMLOBJECTVALIDATOR_REQUIRE(EndpointType,Location);
139 const vector<XMLObject*>& anys=ptr->getUnknownXMLObjects();
140 for_each(anys.begin(),anys.end(),checkWildcardNS());
141 END_XMLOBJECTVALIDATOR;
143 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,IndexedEndpointType,EndpointType);
144 EndpointTypeSchemaValidator::validate(xmlObject);
145 XMLOBJECTVALIDATOR_REQUIRE_INTEGER(IndexedEndpointType,Index);
146 END_XMLOBJECTVALIDATOR;
148 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,ArtifactResolutionService,IndexedEndpointType);
149 IndexedEndpointTypeSchemaValidator::validate(xmlObject);
150 END_XMLOBJECTVALIDATOR;
152 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,SingleLogoutService,EndpointType);
153 EndpointTypeSchemaValidator::validate(xmlObject);
154 END_XMLOBJECTVALIDATOR;
156 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,ManageNameIDService,EndpointType);
157 EndpointTypeSchemaValidator::validate(xmlObject);
158 END_XMLOBJECTVALIDATOR;
160 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,SingleSignOnService,EndpointType);
161 EndpointTypeSchemaValidator::validate(xmlObject);
162 END_XMLOBJECTVALIDATOR;
164 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,NameIDMappingService,EndpointType);
165 EndpointTypeSchemaValidator::validate(xmlObject);
166 END_XMLOBJECTVALIDATOR;
168 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AssertionIDRequestService,EndpointType);
169 EndpointTypeSchemaValidator::validate(xmlObject);
170 END_XMLOBJECTVALIDATOR;
172 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,IDPSSODescriptor,RoleDescriptor);
173 RoleDescriptorSchemaValidator::validate(xmlObject);
174 XMLOBJECTVALIDATOR_NONEMPTY(IDPSSODescriptor,SingleSignOnService);
175 END_XMLOBJECTVALIDATOR;
177 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,ServiceName);
178 XMLOBJECTVALIDATOR_REQUIRE(ServiceName,TextContent);
179 XMLOBJECTVALIDATOR_REQUIRE(ServiceName,Lang);
180 END_XMLOBJECTVALIDATOR;
182 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,ServiceDescription);
183 XMLOBJECTVALIDATOR_REQUIRE(ServiceDescription,TextContent);
184 XMLOBJECTVALIDATOR_REQUIRE(ServiceDescription,Lang);
185 END_XMLOBJECTVALIDATOR;
187 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,RequestedAttribute);
188 XMLOBJECTVALIDATOR_REQUIRE(RequestedAttribute,Name);
189 END_XMLOBJECTVALIDATOR;
191 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,AttributeConsumingService);
192 XMLOBJECTVALIDATOR_REQUIRE_INTEGER(AttributeConsumingService,Index);
193 XMLOBJECTVALIDATOR_NONEMPTY(AttributeConsumingService,ServiceName);
194 XMLOBJECTVALIDATOR_NONEMPTY(AttributeConsumingService,RequestedAttribute);
195 END_XMLOBJECTVALIDATOR;
197 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AssertionConsumerService,IndexedEndpointType);
198 IndexedEndpointTypeSchemaValidator::validate(xmlObject);
199 END_XMLOBJECTVALIDATOR;
201 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,SPSSODescriptor,RoleDescriptor);
202 RoleDescriptorSchemaValidator::validate(xmlObject);
203 XMLOBJECTVALIDATOR_NONEMPTY(SPSSODescriptor,AssertionConsumerService);
204 END_XMLOBJECTVALIDATOR;
206 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AuthnQueryService,EndpointType);
207 EndpointTypeSchemaValidator::validate(xmlObject);
208 END_XMLOBJECTVALIDATOR;
210 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AuthnAuthorityDescriptor,RoleDescriptor);
211 RoleDescriptorSchemaValidator::validate(xmlObject);
212 XMLOBJECTVALIDATOR_NONEMPTY(AuthnAuthorityDescriptor,AuthnQueryService);
213 END_XMLOBJECTVALIDATOR;
215 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AuthzService,EndpointType);
216 EndpointTypeSchemaValidator::validate(xmlObject);
217 END_XMLOBJECTVALIDATOR;
219 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,PDPDescriptor,RoleDescriptor);
220 RoleDescriptorSchemaValidator::validate(xmlObject);
221 XMLOBJECTVALIDATOR_NONEMPTY(PDPDescriptor,AuthzService);
222 END_XMLOBJECTVALIDATOR;
224 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AttributeService,EndpointType);
225 EndpointTypeSchemaValidator::validate(xmlObject);
226 END_XMLOBJECTVALIDATOR;
228 BEGIN_XMLOBJECTVALIDATOR_SUB(SAML_DLLLOCAL,AttributeAuthorityDescriptor,RoleDescriptor);
229 RoleDescriptorSchemaValidator::validate(xmlObject);
230 XMLOBJECTVALIDATOR_NONEMPTY(AttributeAuthorityDescriptor,AttributeService);
231 END_XMLOBJECTVALIDATOR;
233 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,AffiliationDescriptor);
234 XMLOBJECTVALIDATOR_REQUIRE(AffiliationDescriptor,AffiliationOwnerID);
235 XMLOBJECTVALIDATOR_NONEMPTY(AffiliationDescriptor,AffiliateMember);
236 END_XMLOBJECTVALIDATOR;
238 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,EntityDescriptor);
239 XMLOBJECTVALIDATOR_REQUIRE(EntityDescriptor,EntityID);
240 if (ptr->getRoleDescriptors().empty() &&
241 ptr->getIDPSSODescriptors().empty() &&
242 ptr->getSPSSODescriptors().empty() &&
243 ptr->getAuthnAuthorityDescriptors().empty() &&
244 ptr->getAttributeAuthorityDescriptors().empty() &&
245 ptr->getPDPDescriptors().empty()) {
247 if (!ptr->getAffiliationDescriptor())
248 throw ValidationException("EntityDescriptor must have at least one child role or affiliation descriptor.");
250 else if (ptr->getAffiliationDescriptor()) {
251 throw ValidationException("EntityDescriptor cannot have both an AffiliationDescriptor and role descriptors.");
253 END_XMLOBJECTVALIDATOR;
255 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,EntitiesDescriptor);
256 if (ptr->getEntityDescriptors().empty() && ptr->getEntitiesDescriptors().empty())
257 throw ValidationException("EntitiesDescriptor must contain at least one child descriptor.");
258 END_XMLOBJECTVALIDATOR;
260 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,SourceID);
262 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,EntityAttributes);
263 if (!ptr->hasChildren())
264 throw ValidationException("EntityAttributes must contain at least one child element.");
265 END_XMLOBJECTVALIDATOR;
267 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,DigestMethod);
268 XMLOBJECTVALIDATOR_REQUIRE(DigestMethod,Algorithm);
269 END_XMLOBJECTVALIDATOR;
271 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,SigningMethod);
272 XMLOBJECTVALIDATOR_REQUIRE(SigningMethod,Algorithm);
273 END_XMLOBJECTVALIDATOR;
275 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,DisplayName);
276 XMLOBJECTVALIDATOR_REQUIRE(DisplayName,TextContent);
277 XMLOBJECTVALIDATOR_REQUIRE(DisplayName,Lang);
278 END_XMLOBJECTVALIDATOR;
280 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Description);
281 XMLOBJECTVALIDATOR_REQUIRE(Description,TextContent);
282 XMLOBJECTVALIDATOR_REQUIRE(Description,Lang);
283 END_XMLOBJECTVALIDATOR;
285 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,Logo);
286 XMLOBJECTVALIDATOR_REQUIRE(Logo,TextContent);
287 XMLOBJECTVALIDATOR_REQUIRE_INTEGER(Logo,Height);
288 XMLOBJECTVALIDATOR_REQUIRE_INTEGER(Logo,Width);
289 END_XMLOBJECTVALIDATOR;
291 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,InformationURL);
292 XMLOBJECTVALIDATOR_REQUIRE(InformationURL,TextContent);
293 XMLOBJECTVALIDATOR_REQUIRE(InformationURL,Lang);
294 END_XMLOBJECTVALIDATOR;
296 BEGIN_XMLOBJECTVALIDATOR(SAML_DLLLOCAL,PrivacyStatementURL);
297 XMLOBJECTVALIDATOR_REQUIRE(PrivacyStatementURL,TextContent);
298 XMLOBJECTVALIDATOR_REQUIRE(PrivacyStatementURL,Lang);
299 END_XMLOBJECTVALIDATOR;
301 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,IPHint);
302 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,DomainHint);
303 XMLOBJECTVALIDATOR_SIMPLE(SAML_DLLLOCAL,GeolocationHint);
307 #define REGISTER_ELEMENT(cname) \
308 q=xmltooling::QName(SAML20MD_NS,cname::LOCAL_NAME); \
309 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
310 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
312 #define REGISTER_TYPE(cname) \
313 q=xmltooling::QName(SAML20MD_NS,cname::TYPE_NAME); \
314 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
315 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
317 #define REGISTER_ELEMENT_UI(cname) \
318 q=xmltooling::QName(SAML20MD_UI_NS,cname::LOCAL_NAME); \
319 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
320 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
322 #define REGISTER_TYPE_UI(cname) \
323 q=xmltooling::QName(SAML20MD_UI_NS,cname::TYPE_NAME); \
324 XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \
325 SchemaValidators.registerValidator(q,new cname##SchemaValidator())
327 #define REGISTER_ELEMENT_UI_NOVAL(cname) \
328 q=xmltooling::QName(SAML20MD_UI_NS,cname::LOCAL_NAME); \
329 XMLObjectBuilder::registerBuilder(q,new cname##Builder());
331 #define REGISTER_TYPE_UI_NOVAL(cname) \
332 q=xmltooling::QName(SAML20MD_UI_NS,cname::TYPE_NAME); \
333 XMLObjectBuilder::registerBuilder(q,new cname##Builder());
335 void opensaml::saml2md::registerMetadataClasses() {
337 REGISTER_ELEMENT(AdditionalMetadataLocation);
338 REGISTER_ELEMENT(AffiliateMember);
339 REGISTER_ELEMENT(AffiliationDescriptor);
340 REGISTER_ELEMENT(ArtifactResolutionService);
341 REGISTER_ELEMENT(AssertionConsumerService);
342 REGISTER_ELEMENT(AssertionIDRequestService);
343 REGISTER_ELEMENT(AttributeAuthorityDescriptor);;
344 REGISTER_ELEMENT(AttributeConsumingService);
345 REGISTER_ELEMENT(AttributeProfile);
346 REGISTER_ELEMENT(AttributeService);
347 REGISTER_ELEMENT(AuthnAuthorityDescriptor);
348 REGISTER_ELEMENT(AuthnQueryService);
349 REGISTER_ELEMENT(AuthzService);
350 REGISTER_ELEMENT(Company);
351 REGISTER_ELEMENT(ContactPerson);
352 REGISTER_ELEMENT(EmailAddress);
353 REGISTER_ELEMENT(EntitiesDescriptor);
354 REGISTER_ELEMENT(EntityDescriptor);
355 REGISTER_ELEMENT(Extensions);
356 REGISTER_ELEMENT(GivenName);
357 REGISTER_ELEMENT(IDPSSODescriptor);
358 REGISTER_ELEMENT(KeyDescriptor);
359 REGISTER_ELEMENT(ManageNameIDService);
360 REGISTER_ELEMENT(NameIDFormat);
361 REGISTER_ELEMENT(NameIDMappingService);
362 REGISTER_ELEMENT(Organization);
363 REGISTER_ELEMENT(OrganizationDisplayName);
364 REGISTER_ELEMENT(OrganizationName);
365 REGISTER_ELEMENT(OrganizationURL);
366 REGISTER_ELEMENT(PDPDescriptor);
367 REGISTER_ELEMENT(RequestedAttribute);
368 REGISTER_ELEMENT(RoleDescriptor);
369 REGISTER_ELEMENT(ServiceDescription);
370 REGISTER_ELEMENT(ServiceName);
371 REGISTER_ELEMENT(SingleLogoutService);
372 REGISTER_ELEMENT(SingleSignOnService);
373 REGISTER_ELEMENT(SPSSODescriptor);
374 REGISTER_ELEMENT(SurName);
375 REGISTER_ELEMENT(TelephoneNumber);
376 REGISTER_TYPE(AdditionalMetadataLocation);
377 REGISTER_TYPE(AffiliationDescriptor);
378 REGISTER_TYPE(AttributeAuthorityDescriptor);;
379 REGISTER_TYPE(AttributeConsumingService);
380 REGISTER_TYPE(AuthnAuthorityDescriptor);
381 REGISTER_TYPE(ContactPerson);
382 REGISTER_TYPE(EndpointType);
383 REGISTER_TYPE(EntitiesDescriptor);
384 REGISTER_TYPE(EntityDescriptor);
385 REGISTER_TYPE(Extensions);
386 REGISTER_TYPE(IDPSSODescriptor);
387 REGISTER_TYPE(IndexedEndpointType);
388 REGISTER_TYPE(KeyDescriptor);
389 REGISTER_TYPE(localizedNameType);
390 REGISTER_TYPE(localizedURIType);
391 REGISTER_TYPE(Organization);
392 REGISTER_TYPE(PDPDescriptor);
393 REGISTER_TYPE(RequestedAttribute);
394 REGISTER_TYPE(SPSSODescriptor);
396 q=xmltooling::QName(SAML20MD_NS,xmlencryption::EncryptionMethod::LOCAL_NAME);
397 XMLObjectBuilder::registerBuilder(q,new xmlencryption::EncryptionMethodBuilder());
399 q=xmltooling::QName(samlconstants::SAML1MD_NS,SourceID::LOCAL_NAME);
400 XMLObjectBuilder::registerBuilder(q,new SourceIDBuilder());
401 SchemaValidators.registerValidator(q,new SourceIDSchemaValidator());
403 q=xmltooling::QName(SAML20MD_QUERY_EXT_NS,ActionNamespace::LOCAL_NAME);
404 XMLObjectBuilder::registerBuilder(q,new ActionNamespaceBuilder());
405 SchemaValidators.registerValidator(q,new ActionNamespaceSchemaValidator());
407 q=xmltooling::QName(SAML20MD_QUERY_EXT_NS,AuthnQueryDescriptorType::TYPE_NAME);
408 XMLObjectBuilder::registerBuilder(q,new AuthnQueryDescriptorTypeBuilder());
409 SchemaValidators.registerValidator(q,new RoleDescriptorSchemaValidator());
411 q=xmltooling::QName(SAML20MD_QUERY_EXT_NS,AttributeQueryDescriptorType::TYPE_NAME);
412 XMLObjectBuilder::registerBuilder(q,new AttributeQueryDescriptorTypeBuilder());
413 SchemaValidators.registerValidator(q,new RoleDescriptorSchemaValidator());
415 q=xmltooling::QName(SAML20MD_QUERY_EXT_NS,AuthzDecisionQueryDescriptorType::TYPE_NAME);
416 XMLObjectBuilder::registerBuilder(q,new AuthzDecisionQueryDescriptorTypeBuilder());
417 SchemaValidators.registerValidator(q,new RoleDescriptorSchemaValidator());
419 q=xmltooling::QName(SAML20MD_ENTITY_ATTRIBUTE_NS,EntityAttributes::LOCAL_NAME);
420 XMLObjectBuilder::registerBuilder(q,new EntityAttributesBuilder());
421 SchemaValidators.registerValidator(q,new EntityAttributesSchemaValidator());
423 q=xmltooling::QName(SAML20MD_ENTITY_ATTRIBUTE_NS,EntityAttributes::TYPE_NAME);
424 XMLObjectBuilder::registerBuilder(q,new EntityAttributesBuilder());
425 SchemaValidators.registerValidator(q,new EntityAttributesSchemaValidator());
427 q=xmltooling::QName(SAML20MD_ALGSUPPORT_NS,DigestMethod::LOCAL_NAME);
428 XMLObjectBuilder::registerBuilder(q,new DigestMethodBuilder());
429 SchemaValidators.registerValidator(q,new DigestMethodSchemaValidator());
431 q=xmltooling::QName(SAML20MD_ALGSUPPORT_NS,DigestMethod::TYPE_NAME);
432 XMLObjectBuilder::registerBuilder(q,new DigestMethodBuilder());
433 SchemaValidators.registerValidator(q,new DigestMethodSchemaValidator());
435 q=xmltooling::QName(SAML20MD_ALGSUPPORT_NS,SigningMethod::LOCAL_NAME);
436 XMLObjectBuilder::registerBuilder(q,new SigningMethodBuilder());
437 SchemaValidators.registerValidator(q,new SigningMethodSchemaValidator());
439 q=xmltooling::QName(SAML20MD_ALGSUPPORT_NS,SigningMethod::TYPE_NAME);
440 XMLObjectBuilder::registerBuilder(q,new SigningMethodBuilder());
441 SchemaValidators.registerValidator(q,new SigningMethodSchemaValidator());
443 REGISTER_ELEMENT_UI(DisplayName);
444 REGISTER_ELEMENT_UI(Description);
445 REGISTER_ELEMENT_UI(Logo);
446 REGISTER_ELEMENT_UI(InformationURL);
447 REGISTER_ELEMENT_UI(PrivacyStatementURL);
448 REGISTER_ELEMENT_UI(IPHint);
449 REGISTER_ELEMENT_UI(DomainHint);
450 REGISTER_ELEMENT_UI(GeolocationHint);
451 REGISTER_TYPE_UI(Logo);
452 REGISTER_ELEMENT_UI_NOVAL(UIInfo);
453 REGISTER_ELEMENT_UI_NOVAL(DiscoHints);
454 REGISTER_TYPE_UI_NOVAL(UIInfo);
455 REGISTER_TYPE_UI_NOVAL(DiscoHints);