2 * Copyright 2001-2009 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/core/Assertions.h
20 * XMLObjects representing the SAML 2.0 Assertions schema
23 #ifndef __saml2_assertions_h__
24 #define __saml2_assertions_h__
26 #include <saml/Assertion.h>
27 #include <saml/util/SAMLConstants.h>
29 #include <xmltooling/XMLObjectBuilder.h>
30 #include <xmltooling/encryption/Encryption.h>
31 #include <xmltooling/security/CredentialCriteria.h>
32 #include <xmltooling/security/CredentialResolver.h>
33 #include <xmltooling/signature/Signature.h>
34 #include <xmltooling/util/DateTime.h>
36 #define DECL_SAML2OBJECTBUILDER(cname) \
37 DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML20_NS,samlconstants::SAML20_PREFIX)
42 class SAML_API MetadataProvider;
43 class SAML_API MetadataCredentialCriteria;
47 * @namespace opensaml::saml2
48 * SAML 2.0 assertion namespace
53 class SAML_API Assertion;
54 class SAML_API EncryptedAssertion;
57 * Marker interface for SAML types that can be encrypted.
59 class SAML_API EncryptableObject : public virtual xmltooling::XMLObject
62 EncryptableObject() {}
63 virtual ~EncryptableObject() {}
66 DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionIDRef,AssertionID,SAML 2.0 AssertionIDRef element);
67 DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionURIRef,AssertionURI,SAML 2.0 AssertionURIRef element);
68 DECL_XMLOBJECT_SIMPLE(SAML_API,Audience,AudienceURI,SAML 2.0 Audience element);
69 DECL_XMLOBJECT_SIMPLE(SAML_API,AuthnContextClassRef,Reference,SAML 2.0 AuthnContextClassRef element);
70 DECL_XMLOBJECT_SIMPLE(SAML_API,AuthnContextDeclRef,Reference,SAML 2.0 AuthnContextDeclRef element);
71 DECL_XMLOBJECT_SIMPLE(SAML_API,AuthenticatingAuthority,ID,SAML 2.0 AuthenticatingAuthority element);
73 BEGIN_XMLOBJECT(SAML_API,EncryptedElementType,xmltooling::XMLObject,SAML 2.0 EncryptedElementType type);
74 DECL_TYPED_FOREIGN_CHILD(EncryptedData,xmlencryption);
75 DECL_TYPED_FOREIGN_CHILDREN(EncryptedKey,xmlencryption);
76 /** EncryptedElementType local name */
77 static const XMLCh TYPE_NAME[];
80 * Encrypts an object to a single recipient using this object as a container.
82 * @param xmlObject object to encrypt
83 * @param metadataProvider a locked MetadataProvider to supply encryption keys
84 * @param criteria metadata-based CredentialCriteria to use
85 * @param compact true iff compact KeyInfo should be used
86 * @param algorithm optionally specifies data encryption algorithm if none can be determined from metadata
87 * @return the encrypted object
90 const EncryptableObject& xmlObject,
91 const saml2md::MetadataProvider& metadataProvider,
92 saml2md::MetadataCredentialCriteria& criteria,
94 const XMLCh* algorithm=NULL
98 * Encrypts an object to multiple recipients using this object as a container.
100 * @param xmlObject object to encrypt
101 * @param recipients pairs containing a locked MetadataProvider to supply encryption keys,
102 * and a metadata-based CredentialCriteria to use
103 * @param compact true iff compact KeyInfo should be used
104 * @param algorithm optionally specifies data encryption algorithm if none can be determined from metadata
105 * @return the encrypted object
107 virtual void encrypt(
108 const EncryptableObject& xmlObject,
109 const std::vector< std::pair<const saml2md::MetadataProvider*, saml2md::MetadataCredentialCriteria*> >& recipients,
111 const XMLCh* algorithm=NULL
115 * Decrypts the element using the supplied CredentialResolver.
117 * <p>The object returned will be unmarshalled around the decrypted DOM element in a
118 * new Document owned by the object.
120 * @param credResolver locked resolver supplying decryption keys
121 * @param recipient identifier naming the recipient (the entity performing the decryption)
122 * @param criteria optional external criteria to use with resolver
123 * @return the decrypted and unmarshalled object
125 virtual xmltooling::XMLObject* decrypt(
126 const xmltooling::CredentialResolver& credResolver, const XMLCh* recipient, xmltooling::CredentialCriteria* criteria=NULL
130 BEGIN_XMLOBJECT(SAML_API,EncryptedID,EncryptedElementType,SAML 2.0 EncryptedID element);
133 BEGIN_XMLOBJECT(SAML_API,BaseID,EncryptableObject,SAML 2.0 BaseID abstract element);
134 DECL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER);
135 DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
138 BEGIN_XMLOBJECT(SAML_API,NameIDType,xmltooling::XMLObject,SAML 2.0 NameIDType type);
139 DECL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER);
140 DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
141 DECL_STRING_ATTRIB(Format,FORMAT);
142 DECL_STRING_ATTRIB(SPProvidedID,SPPROVIDEDID);
143 DECL_SIMPLE_CONTENT(Name);
144 /** NameIDType local name */
145 static const XMLCh TYPE_NAME[];
146 /** Unspecified name format ID */
147 static const XMLCh UNSPECIFIED[];
148 /** Email address name format ID */
149 static const XMLCh EMAIL[];
150 /** X.509 subject name format ID */
151 static const XMLCh X509_SUBJECT[];
152 /** Windows domain qualified name format ID */
153 static const XMLCh WIN_DOMAIN_QUALIFIED[];
154 /** Kerberos principal name format ID */
155 static const XMLCh KERBEROS[];
156 /** Entity identifier name format ID */
157 static const XMLCh ENTITY[];
158 /** Persistent identifier name format ID */
159 static const XMLCh PERSISTENT[];
160 /** Transient identifier name format ID */
161 static const XMLCh TRANSIENT[];
164 BEGIN_XMLOBJECT2(SAML_API,NameID,NameIDType,EncryptableObject,SAML 2.0 NameID element);
167 BEGIN_XMLOBJECT(SAML_API,Issuer,NameIDType,SAML 2.0 Issuer element);
170 BEGIN_XMLOBJECT(SAML_API,Condition,xmltooling::XMLObject,SAML 2.0 Condition element);
173 BEGIN_XMLOBJECT(SAML_API,AudienceRestriction,Condition,SAML 2.0 AudienceRestriction element);
174 DECL_TYPED_CHILDREN(Audience);
175 /** AudienceRestrictionType local name */
176 static const XMLCh TYPE_NAME[];
179 BEGIN_XMLOBJECT(SAML_API,OneTimeUse,Condition,SAML 2.0 OneTimeUse element);
180 /** OneTimeUseType local name */
181 static const XMLCh TYPE_NAME[];
184 BEGIN_XMLOBJECT(SAML_API,ProxyRestriction,Condition,SAML 2.0 ProxyRestriction element);
185 DECL_INTEGER_ATTRIB(Count,COUNT);
186 DECL_TYPED_CHILDREN(Audience);
187 /** ProxyRestrictionType local name */
188 static const XMLCh TYPE_NAME[];
191 BEGIN_XMLOBJECT(SAML_API,Delegate,xmltooling::XMLObject,SAML 2.0 Delegation Restriction Condition Delegate element);
192 DECL_STRING_ATTRIB(ConfirmationMethod,CONFIRMATIONMETHOD);
193 DECL_DATETIME_ATTRIB(DelegationInstant,DELEGATIONINSTANT);
194 DECL_TYPED_CHILD(BaseID);
195 DECL_TYPED_CHILD(NameID);
196 DECL_TYPED_CHILD(EncryptedID);
197 /** DelegateType local name */
198 static const XMLCh TYPE_NAME[];
201 BEGIN_XMLOBJECT(SAML_API,DelegationRestrictionType,Condition,SAML 2.0 Delegation Restriction Condition type);
202 DECL_TYPED_CHILDREN(Delegate);
203 /** DelegationRestrictionType local name */
204 static const XMLCh TYPE_NAME[];
207 BEGIN_XMLOBJECT(SAML_API,Conditions,xmltooling::XMLObject,SAML 2.0 Conditions element);
208 DECL_DATETIME_ATTRIB(NotBefore,NOTBEFORE);
209 DECL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER);
210 DECL_TYPED_CHILDREN(AudienceRestriction);
211 DECL_TYPED_CHILDREN(OneTimeUse);
212 DECL_TYPED_CHILDREN(ProxyRestriction);
213 DECL_TYPED_CHILDREN(Condition);
214 /** ConditionsType local name */
215 static const XMLCh TYPE_NAME[];
218 BEGIN_XMLOBJECT(SAML_API,SubjectConfirmationDataType,xmltooling::XMLObject,SAML 2.0 SubjectConfirmationDataType base type);
219 DECL_DATETIME_ATTRIB(NotBefore,NOTBEFORE);
220 DECL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER);
221 DECL_STRING_ATTRIB(Recipient,RECIPIENT);
222 DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
223 DECL_STRING_ATTRIB(Address,ADDRESS);
226 BEGIN_XMLOBJECT2(SAML_API,SubjectConfirmationData,SubjectConfirmationDataType,xmltooling::ElementProxy,SAML 2.0 SubjectConfirmationData element);
227 DECL_SIMPLE_CONTENT(Data);
230 BEGIN_XMLOBJECT2(SAML_API,KeyInfoConfirmationDataType,SubjectConfirmationDataType,xmltooling::AttributeExtensibleXMLObject,SAML 2.0 KeyInfoConfirmationDataType type);
231 DECL_TYPED_FOREIGN_CHILDREN(KeyInfo,xmlsignature);
232 /** KeyInfoConfirmationDataType local name */
233 static const XMLCh TYPE_NAME[];
236 BEGIN_XMLOBJECT(SAML_API,SubjectConfirmation,xmltooling::XMLObject,SAML 2.0 SubjectConfirmation element);
237 DECL_STRING_ATTRIB(Method,METHOD);
238 DECL_TYPED_CHILD(BaseID);
239 DECL_TYPED_CHILD(NameID);
240 DECL_TYPED_CHILD(EncryptedID);
241 DECL_XMLOBJECT_CHILD(SubjectConfirmationData);
242 /** SubjectConfirmationType local name */
243 static const XMLCh TYPE_NAME[];
244 /** Bearer confirmation method */
245 static const XMLCh BEARER[];
246 /** Holder of key confirmation method */
247 static const XMLCh HOLDER_KEY[];
248 /** Sender vouches confirmation method */
249 static const XMLCh SENDER_VOUCHES[];
252 BEGIN_XMLOBJECT(SAML_API,Subject,xmltooling::XMLObject,SAML 2.0 Subject element);
253 DECL_TYPED_CHILD(BaseID);
254 DECL_TYPED_CHILD(NameID);
255 DECL_TYPED_CHILD(EncryptedID);
256 DECL_TYPED_CHILDREN(SubjectConfirmation);
257 /** SubjectType local name */
258 static const XMLCh TYPE_NAME[];
261 BEGIN_XMLOBJECT(SAML_API,Statement,xmltooling::XMLObject,SAML 2.0 Statement element);
264 BEGIN_XMLOBJECT(SAML_API,SubjectLocality,xmltooling::XMLObject,SAML 2.0 SubjectLocality element);
265 DECL_STRING_ATTRIB(Address,ADDRESS);
266 DECL_STRING_ATTRIB(DNSName,DNSNAME);
267 /** SubjectLocalityType local name */
268 static const XMLCh TYPE_NAME[];
271 BEGIN_XMLOBJECT(SAML_API,AuthnContextDecl,xmltooling::ElementProxy,SAML 2.0 AuthnContextDecl element);
274 BEGIN_XMLOBJECT(SAML_API,AuthnContext,xmltooling::XMLObject,SAML 2.0 AuthnContext element);
275 DECL_TYPED_CHILD(AuthnContextClassRef);
276 DECL_XMLOBJECT_CHILD(AuthnContextDecl);
277 DECL_TYPED_CHILD(AuthnContextDeclRef);
278 DECL_TYPED_CHILDREN(AuthenticatingAuthority);
279 /** AuthnContextType local name */
280 static const XMLCh TYPE_NAME[];
283 BEGIN_XMLOBJECT(SAML_API,AuthnStatement,Statement,SAML 2.0 AuthnStatement element);
284 DECL_DATETIME_ATTRIB(AuthnInstant,AUTHNINSTANT);
285 DECL_STRING_ATTRIB(SessionIndex,SESSIONINDEX);
286 DECL_DATETIME_ATTRIB(SessionNotOnOrAfter,SESSIONNOTONORAFTER);
287 DECL_TYPED_CHILD(SubjectLocality);
288 DECL_TYPED_CHILD(AuthnContext);
289 /** AuthnStatementType local name */
290 static const XMLCh TYPE_NAME[];
293 BEGIN_XMLOBJECT(SAML_API,Action,xmltooling::XMLObject,SAML 2.0 Action element);
294 DECL_STRING_ATTRIB(Namespace,NAMESPACE);
295 DECL_SIMPLE_CONTENT(Action);
296 /** ActionType local name */
297 static const XMLCh TYPE_NAME[];
298 /** Read/Write/Execute/Delete/Control Action Namespace */
299 static const XMLCh RWEDC_NEG_ACTION_NAMESPACE[];
300 /** Read/Write/Execute/Delete/Control with Negation Action Namespace */
301 static const XMLCh RWEDC_ACTION_NAMESPACE[];
302 /** Get/Head/Put/Post Action Namespace */
303 static const XMLCh GHPP_ACTION_NAMESPACE[];
304 /** UNIX File Permissions Action Namespace */
305 static const XMLCh UNIX_ACTION_NAMESPACE[];
308 BEGIN_XMLOBJECT(SAML_API,Evidence,xmltooling::XMLObject,SAML 2.0 Evidence element);
309 DECL_TYPED_CHILDREN(AssertionIDRef);
310 DECL_TYPED_CHILDREN(AssertionURIRef);
311 DECL_TYPED_CHILDREN(Assertion);
312 DECL_TYPED_CHILDREN(EncryptedAssertion);
313 /** EvidenceType local name */
314 static const XMLCh TYPE_NAME[];
317 BEGIN_XMLOBJECT(SAML_API,AuthzDecisionStatement,Statement,SAML 2.0 AuthzDecisionStatement element);
318 DECL_STRING_ATTRIB(Resource,RESOURCE);
319 DECL_STRING_ATTRIB(Decision,DECISION);
320 DECL_TYPED_CHILDREN(Action);
321 DECL_TYPED_CHILD(Evidence);
322 /** AuthzDecisionStatementType local name */
323 static const XMLCh TYPE_NAME[];
324 /** Permit Decision */
325 static const XMLCh DECISION_PERMIT[];
327 static const XMLCh DECISION_DENY[];
328 /** Indeterminate Decision */
329 static const XMLCh DECISION_INDETERMINATE[];
332 BEGIN_XMLOBJECT(SAML_API,AttributeValue,xmltooling::ElementProxy,SAML 2.0 AttributeValue element);
335 BEGIN_XMLOBJECT2(SAML_API,Attribute,xmltooling::AttributeExtensibleXMLObject,EncryptableObject,SAML 2.0 Attribute element);
336 DECL_STRING_ATTRIB(Name,NAME);
337 DECL_STRING_ATTRIB(NameFormat,NAMEFORMAT);
338 DECL_STRING_ATTRIB(FriendlyName,FRIENDLYNAME);
339 DECL_XMLOBJECT_CHILDREN(AttributeValue);
340 /** AttributeType local name */
341 static const XMLCh TYPE_NAME[];
342 /** Unspecified attribute name format ID */
343 static const XMLCh UNSPECIFIED[];
344 /** URI reference attribute name format ID */
345 static const XMLCh URI_REFERENCE[];
346 /** Basic attribute name format ID */
347 static const XMLCh BASIC[];
350 BEGIN_XMLOBJECT(SAML_API,EncryptedAttribute,EncryptedElementType,SAML 2.0 EncryptedAttribute element);
353 BEGIN_XMLOBJECT(SAML_API,AttributeStatement,Statement,SAML 2.0 AttributeStatement element);
354 DECL_TYPED_CHILDREN(Attribute);
355 DECL_TYPED_CHILDREN(EncryptedAttribute);
356 /** AttributeStatementType local name */
357 static const XMLCh TYPE_NAME[];
360 BEGIN_XMLOBJECT(SAML_API,EncryptedAssertion,EncryptedElementType,SAML 2.0 EncryptedAssertion element);
363 BEGIN_XMLOBJECT(SAML_API,Advice,xmltooling::ElementExtensibleXMLObject,SAML 2.0 Advice element);
364 DECL_TYPED_CHILDREN(AssertionIDRef);
365 DECL_TYPED_CHILDREN(AssertionURIRef);
366 DECL_TYPED_CHILDREN(Assertion);
367 DECL_TYPED_CHILDREN(EncryptedAssertion);
368 /** AdviceType local name */
369 static const XMLCh TYPE_NAME[];
373 * SAML 2.0 assertion or protocol message.
375 class SAML_API RootObject : virtual public opensaml::RootObject
380 virtual ~RootObject() {}
382 /** Gets the Version attribute. */
383 virtual const XMLCh* getVersion() const=0;
385 /** Gets the Issuer. */
386 virtual Issuer* getIssuer() const=0;
389 BEGIN_XMLOBJECT3(SAML_API,Assertion,saml2::RootObject,opensaml::Assertion,EncryptableObject,SAML 2.0 Assertion element);
390 DECL_INHERITED_STRING_ATTRIB(Version,VER);
391 DECL_INHERITED_STRING_ATTRIB(ID,ID);
392 DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
393 DECL_INHERITED_TYPED_CHILD(Issuer);
394 DECL_TYPED_CHILD(Subject);
395 DECL_TYPED_CHILD(Conditions);
396 DECL_TYPED_CHILD(Advice);
397 DECL_TYPED_CHILDREN(Statement);
398 DECL_TYPED_CHILDREN(AuthnStatement);
399 DECL_TYPED_CHILDREN(AttributeStatement);
400 DECL_TYPED_CHILDREN(AuthzDecisionStatement);
401 /** AssertionType local name */
402 static const XMLCh TYPE_NAME[];
405 DECL_SAML2OBJECTBUILDER(Action);
406 DECL_SAML2OBJECTBUILDER(Advice);
407 DECL_SAML2OBJECTBUILDER(Assertion);
408 DECL_SAML2OBJECTBUILDER(AssertionIDRef);
409 DECL_SAML2OBJECTBUILDER(AssertionURIRef);
410 DECL_SAML2OBJECTBUILDER(Attribute);
411 DECL_SAML2OBJECTBUILDER(AttributeStatement);
412 DECL_SAML2OBJECTBUILDER(AttributeValue);
413 DECL_SAML2OBJECTBUILDER(Audience);
414 DECL_SAML2OBJECTBUILDER(AudienceRestriction);
415 DECL_SAML2OBJECTBUILDER(AuthenticatingAuthority);
416 DECL_SAML2OBJECTBUILDER(AuthnContext);
417 DECL_SAML2OBJECTBUILDER(AuthnContextClassRef);
418 DECL_SAML2OBJECTBUILDER(AuthnContextDecl);
419 DECL_SAML2OBJECTBUILDER(AuthnContextDeclRef);
420 DECL_SAML2OBJECTBUILDER(AuthnStatement);
421 DECL_SAML2OBJECTBUILDER(AuthzDecisionStatement);
422 DECL_SAML2OBJECTBUILDER(Conditions);
423 DECL_SAML2OBJECTBUILDER(EncryptedAssertion);
424 DECL_SAML2OBJECTBUILDER(EncryptedAttribute);
425 DECL_SAML2OBJECTBUILDER(EncryptedID);
426 DECL_SAML2OBJECTBUILDER(Evidence);
427 DECL_SAML2OBJECTBUILDER(Issuer);
428 DECL_SAML2OBJECTBUILDER(NameID);
429 DECL_SAML2OBJECTBUILDER(OneTimeUse);
430 DECL_SAML2OBJECTBUILDER(ProxyRestriction);
431 DECL_SAML2OBJECTBUILDER(Subject);
432 DECL_SAML2OBJECTBUILDER(SubjectConfirmation);
433 DECL_SAML2OBJECTBUILDER(SubjectConfirmationData);
434 DECL_SAML2OBJECTBUILDER(SubjectLocality);
436 DECL_XMLOBJECTBUILDER(SAML_API,Delegate,samlconstants::SAML20_DELEGATION_CONDITION_NS,samlconstants::SAML20_DELEGATION_CONDITION_PREFIX);
439 * Builder for NameIDType objects.
441 * This is customized to force the element name to be specified.
443 class SAML_API NameIDTypeBuilder : public xmltooling::XMLObjectBuilder {
445 virtual ~NameIDTypeBuilder() {}
446 /** Builder that allows element/type override. */
447 #ifdef HAVE_COVARIANT_RETURNS
448 virtual NameIDType* buildObject(
450 virtual xmltooling::XMLObject* buildObject(
452 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
455 /** Singleton builder. */
456 static NameIDType* buildNameIDType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
457 const NameIDTypeBuilder* b = dynamic_cast<const NameIDTypeBuilder*>(
458 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,NameIDType::TYPE_NAME))
461 xmltooling::QName schemaType(samlconstants::SAML20_NS,NameIDType::TYPE_NAME,samlconstants::SAML20_PREFIX);
462 #ifdef HAVE_COVARIANT_RETURNS
463 return b->buildObject(nsURI, localName, prefix, &schemaType);
465 return dynamic_cast<NameIDType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
468 throw xmltooling::XMLObjectException("Unable to obtain typed builder for NameIDType.");
473 * Builder for Condition extension objects.
475 * This is customized to force the schema type to be specified.
477 class SAML_API ConditionBuilder : public xmltooling::XMLObjectBuilder {
479 virtual ~ConditionBuilder() {}
480 /** Builder that allows element/type override. */
481 #ifdef HAVE_COVARIANT_RETURNS
482 virtual Condition* buildObject(
484 virtual xmltooling::XMLObject* buildObject(
486 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
489 /** Singleton builder. */
490 static Condition* buildCondition(const xmltooling::QName& schemaType) {
491 const ConditionBuilder* b = dynamic_cast<const ConditionBuilder*>(
492 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,Condition::LOCAL_NAME))
495 #ifdef HAVE_COVARIANT_RETURNS
496 return b->buildObject(samlconstants::SAML20_NS, Condition::LOCAL_NAME, samlconstants::SAML20_PREFIX, &schemaType);
498 return dynamic_cast<Condition*>(b->buildObject(samlconstants::SAML20_NS, Condition::LOCAL_NAME, samlconstants::SAML20_PREFIX, &schemaType));
501 throw xmltooling::XMLObjectException("Unable to obtain typed builder for Condition.");
506 * Builder for DelegationRestrictionType objects.
508 * This is customized to return a Condition element with an xsi:type of DelegationRestrictionType.
510 class SAML_API DelegationRestrictionTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
512 virtual ~DelegationRestrictionTypeBuilder() {}
513 /** Default builder. */
514 #ifdef HAVE_COVARIANT_RETURNS
515 virtual DelegationRestrictionType* buildObject() const {
517 virtual xmltooling::XMLObject* buildObject() const {
519 xmltooling::QName schemaType(
520 samlconstants::SAML20_DELEGATION_CONDITION_NS,
521 DelegationRestrictionType::TYPE_NAME,
522 samlconstants::SAML20_DELEGATION_CONDITION_PREFIX
525 samlconstants::SAML20_DELEGATION_CONDITION_NS,
526 DelegationRestrictionType::LOCAL_NAME,
527 samlconstants::SAML20_DELEGATION_CONDITION_PREFIX,
531 /** Builder that allows element/type override. */
532 #ifdef HAVE_COVARIANT_RETURNS
533 virtual DelegationRestrictionType* buildObject(
535 virtual xmltooling::XMLObject* buildObject(
537 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
540 /** Singleton builder. */
541 static DelegationRestrictionType* buildDelegationRestrictionType() {
542 const DelegationRestrictionTypeBuilder* b = dynamic_cast<const DelegationRestrictionTypeBuilder*>(
543 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_DELEGATION_CONDITION_NS,DelegationRestrictionType::TYPE_NAME))
546 #ifdef HAVE_COVARIANT_RETURNS
547 return b->buildObject();
549 return dynamic_cast<DelegationRestrictionType*>(b->buildObject());
551 throw xmltooling::XMLObjectException("Unable to obtain typed builder for DelegationRestrictionType.");
556 * Builder for KeyInfoConfirmationDataType objects.
558 * This is customized to return a SubjectConfirmationData element with an
559 * xsi:type of KeyInfoConfirmationDataType.
561 class SAML_API KeyInfoConfirmationDataTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
563 virtual ~KeyInfoConfirmationDataTypeBuilder() {}
564 /** Default builder. */
565 #ifdef HAVE_COVARIANT_RETURNS
566 virtual KeyInfoConfirmationDataType* buildObject() const {
568 virtual xmltooling::XMLObject* buildObject() const {
570 xmltooling::QName schemaType(
571 samlconstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME,samlconstants::SAML20_PREFIX
574 samlconstants::SAML20_NS,KeyInfoConfirmationDataType::LOCAL_NAME,samlconstants::SAML20_PREFIX,&schemaType
577 /** Builder that allows element/type override. */
578 #ifdef HAVE_COVARIANT_RETURNS
579 virtual KeyInfoConfirmationDataType* buildObject(
581 virtual xmltooling::XMLObject* buildObject(
583 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
586 /** Singleton builder. */
587 static KeyInfoConfirmationDataType* buildKeyInfoConfirmationDataType() {
588 const KeyInfoConfirmationDataTypeBuilder* b = dynamic_cast<const KeyInfoConfirmationDataTypeBuilder*>(
589 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME))
592 #ifdef HAVE_COVARIANT_RETURNS
593 return b->buildObject();
595 return dynamic_cast<KeyInfoConfirmationDataType*>(b->buildObject());
597 throw xmltooling::XMLObjectException("Unable to obtain typed builder for KeyInfoConfirmationDataType.");
602 * Builder for Statement extension objects.
604 * This is customized to force the schema type to be specified.
606 class SAML_API StatementBuilder : public xmltooling::XMLObjectBuilder {
608 virtual ~StatementBuilder() {}
609 /** Builder that allows element/type override. */
610 #ifdef HAVE_COVARIANT_RETURNS
611 virtual Statement* buildObject(
613 virtual xmltooling::XMLObject* buildObject(
615 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
618 /** Singleton builder. */
619 static Statement* buildStatement(const xmltooling::QName& schemaType) {
620 const StatementBuilder* b = dynamic_cast<const StatementBuilder*>(
621 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,Statement::LOCAL_NAME))
624 #ifdef HAVE_COVARIANT_RETURNS
625 return b->buildObject(samlconstants::SAML20_NS, Statement::LOCAL_NAME, samlconstants::SAML20_PREFIX, &schemaType);
627 return dynamic_cast<Statement*>(b->buildObject(samlconstants::SAML20_NS, Statement::LOCAL_NAME, samlconstants::SAML20_PREFIX, &schemaType));
630 throw xmltooling::XMLObjectException("Unable to obtain typed builder for Statement.");
635 * Registers builders and validators for SAML 2.0 Assertion classes into the runtime.
637 void SAML_API registerAssertionClasses();
641 #endif /* __saml2_assertions_h__ */