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/ConcreteXMLObjectBuilder.h>
30 #include <xmltooling/ElementProxy.h>
32 #define DECL_SAML2OBJECTBUILDER(cname) \
33 DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML20_NS,samlconstants::SAML20_PREFIX)
35 namespace xmltooling {
36 class XMLTOOL_API CredentialCriteria;
37 class XMLTOOL_API CredentialResolver;
38 class XMLTOOL_API DateTime;
41 namespace xmlencryption {
42 class XMLTOOL_API EncryptedData;
43 class XMLTOOL_API EncryptedKey;
46 namespace xmlsignature {
47 class XMLTOOL_API KeyInfo;
48 class XMLTOOL_API Signature;
54 class SAML_API MetadataProvider;
55 class SAML_API MetadataCredentialCriteria;
59 * @namespace opensaml::saml2
60 * SAML 2.0 assertion namespace
65 class SAML_API Assertion;
66 class SAML_API EncryptedAssertion;
69 * Marker interface for SAML types that can be encrypted.
71 class SAML_API EncryptableObject : public virtual xmltooling::XMLObject
74 EncryptableObject() {}
75 virtual ~EncryptableObject() {}
78 DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionIDRef,AssertionID,SAML 2.0 AssertionIDRef element);
79 DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionURIRef,AssertionURI,SAML 2.0 AssertionURIRef element);
80 DECL_XMLOBJECT_SIMPLE(SAML_API,Audience,AudienceURI,SAML 2.0 Audience element);
81 DECL_XMLOBJECT_SIMPLE(SAML_API,AuthnContextClassRef,Reference,SAML 2.0 AuthnContextClassRef element);
82 DECL_XMLOBJECT_SIMPLE(SAML_API,AuthnContextDeclRef,Reference,SAML 2.0 AuthnContextDeclRef element);
83 DECL_XMLOBJECT_SIMPLE(SAML_API,AuthenticatingAuthority,ID,SAML 2.0 AuthenticatingAuthority element);
85 BEGIN_XMLOBJECT(SAML_API,EncryptedElementType,xmltooling::XMLObject,SAML 2.0 EncryptedElementType type);
86 DECL_TYPED_FOREIGN_CHILD(EncryptedData,xmlencryption);
87 DECL_TYPED_FOREIGN_CHILDREN(EncryptedKey,xmlencryption);
88 /** EncryptedElementType local name */
89 static const XMLCh TYPE_NAME[];
92 * Encrypts an object to a single recipient using this object as a container.
94 * @param xmlObject object to encrypt
95 * @param metadataProvider a locked MetadataProvider to supply encryption keys
96 * @param criteria metadata-based CredentialCriteria to use
97 * @param compact true iff compact KeyInfo should be used
98 * @param algorithm optionally specifies data encryption algorithm if none can be determined from metadata
99 * @return the encrypted object
101 virtual void encrypt(
102 const EncryptableObject& xmlObject,
103 const saml2md::MetadataProvider& metadataProvider,
104 saml2md::MetadataCredentialCriteria& criteria,
106 const XMLCh* algorithm=NULL
110 * Encrypts an object to multiple recipients using this object as a container.
112 * @param xmlObject object to encrypt
113 * @param recipients pairs containing a locked MetadataProvider to supply encryption keys,
114 * and a metadata-based CredentialCriteria to use
115 * @param compact true iff compact KeyInfo should be used
116 * @param algorithm optionally specifies data encryption algorithm if none can be determined from metadata
117 * @return the encrypted object
119 virtual void encrypt(
120 const EncryptableObject& xmlObject,
121 const std::vector< std::pair<const saml2md::MetadataProvider*, saml2md::MetadataCredentialCriteria*> >& recipients,
123 const XMLCh* algorithm=NULL
127 * Decrypts the element using the supplied CredentialResolver.
129 * <p>The object returned will be unmarshalled around the decrypted DOM element in a
130 * new Document owned by the object.
132 * @param credResolver locked resolver supplying decryption keys
133 * @param recipient identifier naming the recipient (the entity performing the decryption)
134 * @param criteria optional external criteria to use with resolver
135 * @return the decrypted and unmarshalled object
137 virtual xmltooling::XMLObject* decrypt(
138 const xmltooling::CredentialResolver& credResolver, const XMLCh* recipient, xmltooling::CredentialCriteria* criteria=NULL
142 BEGIN_XMLOBJECT(SAML_API,EncryptedID,EncryptedElementType,SAML 2.0 EncryptedID element);
145 BEGIN_XMLOBJECT(SAML_API,BaseID,EncryptableObject,SAML 2.0 BaseID abstract element);
146 DECL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER);
147 DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
150 BEGIN_XMLOBJECT(SAML_API,NameIDType,xmltooling::XMLObject,SAML 2.0 NameIDType type);
151 DECL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER);
152 DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
153 DECL_STRING_ATTRIB(Format,FORMAT);
154 DECL_STRING_ATTRIB(SPProvidedID,SPPROVIDEDID);
155 DECL_SIMPLE_CONTENT(Name);
156 /** NameIDType local name */
157 static const XMLCh TYPE_NAME[];
158 /** Unspecified name format ID */
159 static const XMLCh UNSPECIFIED[];
160 /** Email address name format ID */
161 static const XMLCh EMAIL[];
162 /** X.509 subject name format ID */
163 static const XMLCh X509_SUBJECT[];
164 /** Windows domain qualified name format ID */
165 static const XMLCh WIN_DOMAIN_QUALIFIED[];
166 /** Kerberos principal name format ID */
167 static const XMLCh KERBEROS[];
168 /** Entity identifier name format ID */
169 static const XMLCh ENTITY[];
170 /** Persistent identifier name format ID */
171 static const XMLCh PERSISTENT[];
172 /** Transient identifier name format ID */
173 static const XMLCh TRANSIENT[];
176 BEGIN_XMLOBJECT2(SAML_API,NameID,NameIDType,EncryptableObject,SAML 2.0 NameID element);
179 BEGIN_XMLOBJECT(SAML_API,Issuer,NameIDType,SAML 2.0 Issuer element);
182 BEGIN_XMLOBJECT(SAML_API,Condition,xmltooling::XMLObject,SAML 2.0 Condition element);
185 BEGIN_XMLOBJECT(SAML_API,AudienceRestriction,Condition,SAML 2.0 AudienceRestriction element);
186 DECL_TYPED_CHILDREN(Audience);
187 /** AudienceRestrictionType local name */
188 static const XMLCh TYPE_NAME[];
191 BEGIN_XMLOBJECT(SAML_API,OneTimeUse,Condition,SAML 2.0 OneTimeUse element);
192 /** OneTimeUseType local name */
193 static const XMLCh TYPE_NAME[];
196 BEGIN_XMLOBJECT(SAML_API,ProxyRestriction,Condition,SAML 2.0 ProxyRestriction element);
197 DECL_INTEGER_ATTRIB(Count,COUNT);
198 DECL_TYPED_CHILDREN(Audience);
199 /** ProxyRestrictionType local name */
200 static const XMLCh TYPE_NAME[];
203 BEGIN_XMLOBJECT(SAML_API,Delegate,xmltooling::XMLObject,SAML 2.0 Delegation Restriction Condition Delegate element);
204 DECL_STRING_ATTRIB(ConfirmationMethod,CONFIRMATIONMETHOD);
205 DECL_DATETIME_ATTRIB(DelegationInstant,DELEGATIONINSTANT);
206 DECL_TYPED_CHILD(BaseID);
207 DECL_TYPED_CHILD(NameID);
208 DECL_TYPED_CHILD(EncryptedID);
209 /** DelegateType local name */
210 static const XMLCh TYPE_NAME[];
213 BEGIN_XMLOBJECT(SAML_API,DelegationRestrictionType,Condition,SAML 2.0 Delegation Restriction Condition type);
214 DECL_TYPED_CHILDREN(Delegate);
215 /** DelegationRestrictionType local name */
216 static const XMLCh TYPE_NAME[];
219 BEGIN_XMLOBJECT(SAML_API,Conditions,xmltooling::XMLObject,SAML 2.0 Conditions element);
220 DECL_DATETIME_ATTRIB(NotBefore,NOTBEFORE);
221 DECL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER);
222 DECL_TYPED_CHILDREN(AudienceRestriction);
223 DECL_TYPED_CHILDREN(OneTimeUse);
224 DECL_TYPED_CHILDREN(ProxyRestriction);
225 DECL_TYPED_CHILDREN(Condition);
226 /** ConditionsType local name */
227 static const XMLCh TYPE_NAME[];
230 BEGIN_XMLOBJECT(SAML_API,SubjectConfirmationDataType,xmltooling::XMLObject,SAML 2.0 SubjectConfirmationDataType base type);
231 DECL_DATETIME_ATTRIB(NotBefore,NOTBEFORE);
232 DECL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER);
233 DECL_STRING_ATTRIB(Recipient,RECIPIENT);
234 DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
235 DECL_STRING_ATTRIB(Address,ADDRESS);
238 BEGIN_XMLOBJECT2(SAML_API,SubjectConfirmationData,SubjectConfirmationDataType,xmltooling::ElementProxy,SAML 2.0 SubjectConfirmationData element);
239 DECL_SIMPLE_CONTENT(Data);
242 BEGIN_XMLOBJECT2(SAML_API,KeyInfoConfirmationDataType,SubjectConfirmationDataType,xmltooling::AttributeExtensibleXMLObject,SAML 2.0 KeyInfoConfirmationDataType type);
243 DECL_TYPED_FOREIGN_CHILDREN(KeyInfo,xmlsignature);
244 /** KeyInfoConfirmationDataType local name */
245 static const XMLCh TYPE_NAME[];
248 BEGIN_XMLOBJECT(SAML_API,SubjectConfirmation,xmltooling::XMLObject,SAML 2.0 SubjectConfirmation element);
249 DECL_STRING_ATTRIB(Method,METHOD);
250 DECL_TYPED_CHILD(BaseID);
251 DECL_TYPED_CHILD(NameID);
252 DECL_TYPED_CHILD(EncryptedID);
253 DECL_XMLOBJECT_CHILD(SubjectConfirmationData);
254 /** SubjectConfirmationType local name */
255 static const XMLCh TYPE_NAME[];
256 /** Bearer confirmation method */
257 static const XMLCh BEARER[];
258 /** Holder of key confirmation method */
259 static const XMLCh HOLDER_KEY[];
260 /** Sender vouches confirmation method */
261 static const XMLCh SENDER_VOUCHES[];
264 BEGIN_XMLOBJECT(SAML_API,Subject,xmltooling::XMLObject,SAML 2.0 Subject element);
265 DECL_TYPED_CHILD(BaseID);
266 DECL_TYPED_CHILD(NameID);
267 DECL_TYPED_CHILD(EncryptedID);
268 DECL_TYPED_CHILDREN(SubjectConfirmation);
269 /** SubjectType local name */
270 static const XMLCh TYPE_NAME[];
273 BEGIN_XMLOBJECT(SAML_API,Statement,xmltooling::XMLObject,SAML 2.0 Statement element);
276 BEGIN_XMLOBJECT(SAML_API,SubjectLocality,xmltooling::XMLObject,SAML 2.0 SubjectLocality element);
277 DECL_STRING_ATTRIB(Address,ADDRESS);
278 DECL_STRING_ATTRIB(DNSName,DNSNAME);
279 /** SubjectLocalityType local name */
280 static const XMLCh TYPE_NAME[];
283 BEGIN_XMLOBJECT(SAML_API,AuthnContextDecl,xmltooling::ElementProxy,SAML 2.0 AuthnContextDecl element);
286 BEGIN_XMLOBJECT(SAML_API,AuthnContext,xmltooling::XMLObject,SAML 2.0 AuthnContext element);
287 DECL_TYPED_CHILD(AuthnContextClassRef);
288 DECL_XMLOBJECT_CHILD(AuthnContextDecl);
289 DECL_TYPED_CHILD(AuthnContextDeclRef);
290 DECL_TYPED_CHILDREN(AuthenticatingAuthority);
291 /** AuthnContextType local name */
292 static const XMLCh TYPE_NAME[];
295 BEGIN_XMLOBJECT(SAML_API,AuthnStatement,Statement,SAML 2.0 AuthnStatement element);
296 DECL_DATETIME_ATTRIB(AuthnInstant,AUTHNINSTANT);
297 DECL_STRING_ATTRIB(SessionIndex,SESSIONINDEX);
298 DECL_DATETIME_ATTRIB(SessionNotOnOrAfter,SESSIONNOTONORAFTER);
299 DECL_TYPED_CHILD(SubjectLocality);
300 DECL_TYPED_CHILD(AuthnContext);
301 /** AuthnStatementType local name */
302 static const XMLCh TYPE_NAME[];
305 BEGIN_XMLOBJECT(SAML_API,Action,xmltooling::XMLObject,SAML 2.0 Action element);
306 DECL_STRING_ATTRIB(Namespace,NAMESPACE);
307 DECL_SIMPLE_CONTENT(Action);
308 /** ActionType local name */
309 static const XMLCh TYPE_NAME[];
310 /** Read/Write/Execute/Delete/Control Action Namespace */
311 static const XMLCh RWEDC_NEG_ACTION_NAMESPACE[];
312 /** Read/Write/Execute/Delete/Control with Negation Action Namespace */
313 static const XMLCh RWEDC_ACTION_NAMESPACE[];
314 /** Get/Head/Put/Post Action Namespace */
315 static const XMLCh GHPP_ACTION_NAMESPACE[];
316 /** UNIX File Permissions Action Namespace */
317 static const XMLCh UNIX_ACTION_NAMESPACE[];
320 BEGIN_XMLOBJECT(SAML_API,Evidence,xmltooling::XMLObject,SAML 2.0 Evidence element);
321 DECL_TYPED_CHILDREN(AssertionIDRef);
322 DECL_TYPED_CHILDREN(AssertionURIRef);
323 DECL_TYPED_CHILDREN(Assertion);
324 DECL_TYPED_CHILDREN(EncryptedAssertion);
325 /** EvidenceType local name */
326 static const XMLCh TYPE_NAME[];
329 BEGIN_XMLOBJECT(SAML_API,AuthzDecisionStatement,Statement,SAML 2.0 AuthzDecisionStatement element);
330 DECL_STRING_ATTRIB(Resource,RESOURCE);
331 DECL_STRING_ATTRIB(Decision,DECISION);
332 DECL_TYPED_CHILDREN(Action);
333 DECL_TYPED_CHILD(Evidence);
334 /** AuthzDecisionStatementType local name */
335 static const XMLCh TYPE_NAME[];
336 /** Permit Decision */
337 static const XMLCh DECISION_PERMIT[];
339 static const XMLCh DECISION_DENY[];
340 /** Indeterminate Decision */
341 static const XMLCh DECISION_INDETERMINATE[];
344 BEGIN_XMLOBJECT(SAML_API,AttributeValue,xmltooling::ElementProxy,SAML 2.0 AttributeValue element);
347 BEGIN_XMLOBJECT2(SAML_API,Attribute,xmltooling::AttributeExtensibleXMLObject,EncryptableObject,SAML 2.0 Attribute element);
348 DECL_STRING_ATTRIB(Name,NAME);
349 DECL_STRING_ATTRIB(NameFormat,NAMEFORMAT);
350 DECL_STRING_ATTRIB(FriendlyName,FRIENDLYNAME);
351 DECL_XMLOBJECT_CHILDREN(AttributeValue);
352 /** AttributeType local name */
353 static const XMLCh TYPE_NAME[];
354 /** Unspecified attribute name format ID */
355 static const XMLCh UNSPECIFIED[];
356 /** URI reference attribute name format ID */
357 static const XMLCh URI_REFERENCE[];
358 /** Basic attribute name format ID */
359 static const XMLCh BASIC[];
362 BEGIN_XMLOBJECT(SAML_API,EncryptedAttribute,EncryptedElementType,SAML 2.0 EncryptedAttribute element);
365 BEGIN_XMLOBJECT(SAML_API,AttributeStatement,Statement,SAML 2.0 AttributeStatement element);
366 DECL_TYPED_CHILDREN(Attribute);
367 DECL_TYPED_CHILDREN(EncryptedAttribute);
368 /** AttributeStatementType local name */
369 static const XMLCh TYPE_NAME[];
372 BEGIN_XMLOBJECT(SAML_API,EncryptedAssertion,EncryptedElementType,SAML 2.0 EncryptedAssertion element);
375 BEGIN_XMLOBJECT(SAML_API,Advice,xmltooling::ElementExtensibleXMLObject,SAML 2.0 Advice element);
376 DECL_TYPED_CHILDREN(AssertionIDRef);
377 DECL_TYPED_CHILDREN(AssertionURIRef);
378 DECL_TYPED_CHILDREN(Assertion);
379 DECL_TYPED_CHILDREN(EncryptedAssertion);
380 /** AdviceType local name */
381 static const XMLCh TYPE_NAME[];
385 * SAML 2.0 assertion or protocol message.
387 class SAML_API RootObject : virtual public opensaml::RootObject
392 virtual ~RootObject() {}
394 /** Gets the Version attribute. */
395 virtual const XMLCh* getVersion() const=0;
397 /** Gets the Issuer. */
398 virtual Issuer* getIssuer() const=0;
401 BEGIN_XMLOBJECT3(SAML_API,Assertion,saml2::RootObject,opensaml::Assertion,EncryptableObject,SAML 2.0 Assertion element);
402 DECL_INHERITED_STRING_ATTRIB(Version,VER);
403 DECL_INHERITED_STRING_ATTRIB(ID,ID);
404 DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
405 DECL_INHERITED_TYPED_CHILD(Issuer);
406 DECL_TYPED_CHILD(Subject);
407 DECL_TYPED_CHILD(Conditions);
408 DECL_TYPED_CHILD(Advice);
409 DECL_TYPED_CHILDREN(Statement);
410 DECL_TYPED_CHILDREN(AuthnStatement);
411 DECL_TYPED_CHILDREN(AttributeStatement);
412 DECL_TYPED_CHILDREN(AuthzDecisionStatement);
413 /** AssertionType local name */
414 static const XMLCh TYPE_NAME[];
417 DECL_SAML2OBJECTBUILDER(Action);
418 DECL_SAML2OBJECTBUILDER(Advice);
419 DECL_SAML2OBJECTBUILDER(Assertion);
420 DECL_SAML2OBJECTBUILDER(AssertionIDRef);
421 DECL_SAML2OBJECTBUILDER(AssertionURIRef);
422 DECL_SAML2OBJECTBUILDER(Attribute);
423 DECL_SAML2OBJECTBUILDER(AttributeStatement);
424 DECL_SAML2OBJECTBUILDER(AttributeValue);
425 DECL_SAML2OBJECTBUILDER(Audience);
426 DECL_SAML2OBJECTBUILDER(AudienceRestriction);
427 DECL_SAML2OBJECTBUILDER(AuthenticatingAuthority);
428 DECL_SAML2OBJECTBUILDER(AuthnContext);
429 DECL_SAML2OBJECTBUILDER(AuthnContextClassRef);
430 DECL_SAML2OBJECTBUILDER(AuthnContextDecl);
431 DECL_SAML2OBJECTBUILDER(AuthnContextDeclRef);
432 DECL_SAML2OBJECTBUILDER(AuthnStatement);
433 DECL_SAML2OBJECTBUILDER(AuthzDecisionStatement);
434 DECL_SAML2OBJECTBUILDER(Conditions);
435 DECL_SAML2OBJECTBUILDER(EncryptedAssertion);
436 DECL_SAML2OBJECTBUILDER(EncryptedAttribute);
437 DECL_SAML2OBJECTBUILDER(EncryptedID);
438 DECL_SAML2OBJECTBUILDER(Evidence);
439 DECL_SAML2OBJECTBUILDER(Issuer);
440 DECL_SAML2OBJECTBUILDER(NameID);
441 DECL_SAML2OBJECTBUILDER(OneTimeUse);
442 DECL_SAML2OBJECTBUILDER(ProxyRestriction);
443 DECL_SAML2OBJECTBUILDER(Subject);
444 DECL_SAML2OBJECTBUILDER(SubjectConfirmation);
445 DECL_SAML2OBJECTBUILDER(SubjectConfirmationData);
446 DECL_SAML2OBJECTBUILDER(SubjectLocality);
448 DECL_XMLOBJECTBUILDER(SAML_API,Delegate,samlconstants::SAML20_DELEGATION_CONDITION_NS,samlconstants::SAML20_DELEGATION_CONDITION_PREFIX);
451 * Builder for NameIDType objects.
453 * This is customized to force the element name to be specified.
455 class SAML_API NameIDTypeBuilder : public xmltooling::XMLObjectBuilder {
457 virtual ~NameIDTypeBuilder() {}
458 /** Builder that allows element/type override. */
459 #ifdef HAVE_COVARIANT_RETURNS
460 virtual NameIDType* buildObject(
462 virtual xmltooling::XMLObject* buildObject(
464 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
467 /** Singleton builder. */
468 static NameIDType* buildNameIDType(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
469 const NameIDTypeBuilder* b = dynamic_cast<const NameIDTypeBuilder*>(
470 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,NameIDType::TYPE_NAME))
473 xmltooling::QName schemaType(samlconstants::SAML20_NS,NameIDType::TYPE_NAME,samlconstants::SAML20_PREFIX);
474 #ifdef HAVE_COVARIANT_RETURNS
475 return b->buildObject(nsURI, localName, prefix, &schemaType);
477 return dynamic_cast<NameIDType*>(b->buildObject(nsURI, localName, prefix, &schemaType));
480 throw xmltooling::XMLObjectException("Unable to obtain typed builder for NameIDType.");
485 * Builder for Condition extension objects.
487 * This is customized to force the schema type to be specified.
489 class SAML_API ConditionBuilder : public xmltooling::XMLObjectBuilder {
491 virtual ~ConditionBuilder() {}
492 /** Builder that allows element/type override. */
493 #ifdef HAVE_COVARIANT_RETURNS
494 virtual Condition* buildObject(
496 virtual xmltooling::XMLObject* buildObject(
498 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
501 /** Singleton builder. */
502 static Condition* buildCondition(const xmltooling::QName& schemaType) {
503 const ConditionBuilder* b = dynamic_cast<const ConditionBuilder*>(
504 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,Condition::LOCAL_NAME))
507 #ifdef HAVE_COVARIANT_RETURNS
508 return b->buildObject(samlconstants::SAML20_NS, Condition::LOCAL_NAME, samlconstants::SAML20_PREFIX, &schemaType);
510 return dynamic_cast<Condition*>(b->buildObject(samlconstants::SAML20_NS, Condition::LOCAL_NAME, samlconstants::SAML20_PREFIX, &schemaType));
513 throw xmltooling::XMLObjectException("Unable to obtain typed builder for Condition.");
518 * Builder for DelegationRestrictionType objects.
520 * This is customized to return a Condition element with an xsi:type of DelegationRestrictionType.
522 class SAML_API DelegationRestrictionTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
524 virtual ~DelegationRestrictionTypeBuilder() {}
525 /** Default builder. */
526 #ifdef HAVE_COVARIANT_RETURNS
527 virtual DelegationRestrictionType* buildObject() const {
529 virtual xmltooling::XMLObject* buildObject() const {
531 xmltooling::QName schemaType(
532 samlconstants::SAML20_DELEGATION_CONDITION_NS,
533 DelegationRestrictionType::TYPE_NAME,
534 samlconstants::SAML20_DELEGATION_CONDITION_PREFIX
537 samlconstants::SAML20_DELEGATION_CONDITION_NS,
538 DelegationRestrictionType::LOCAL_NAME,
539 samlconstants::SAML20_DELEGATION_CONDITION_PREFIX,
543 /** Builder that allows element/type override. */
544 #ifdef HAVE_COVARIANT_RETURNS
545 virtual DelegationRestrictionType* buildObject(
547 virtual xmltooling::XMLObject* buildObject(
549 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
552 /** Singleton builder. */
553 static DelegationRestrictionType* buildDelegationRestrictionType() {
554 const DelegationRestrictionTypeBuilder* b = dynamic_cast<const DelegationRestrictionTypeBuilder*>(
555 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_DELEGATION_CONDITION_NS,DelegationRestrictionType::TYPE_NAME))
558 #ifdef HAVE_COVARIANT_RETURNS
559 return b->buildObject();
561 return dynamic_cast<DelegationRestrictionType*>(b->buildObject());
563 throw xmltooling::XMLObjectException("Unable to obtain typed builder for DelegationRestrictionType.");
568 * Builder for KeyInfoConfirmationDataType objects.
570 * This is customized to return a SubjectConfirmationData element with an
571 * xsi:type of KeyInfoConfirmationDataType.
573 class SAML_API KeyInfoConfirmationDataTypeBuilder : public xmltooling::ConcreteXMLObjectBuilder {
575 virtual ~KeyInfoConfirmationDataTypeBuilder() {}
576 /** Default builder. */
577 #ifdef HAVE_COVARIANT_RETURNS
578 virtual KeyInfoConfirmationDataType* buildObject() const {
580 virtual xmltooling::XMLObject* buildObject() const {
582 xmltooling::QName schemaType(
583 samlconstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME,samlconstants::SAML20_PREFIX
586 samlconstants::SAML20_NS,KeyInfoConfirmationDataType::LOCAL_NAME,samlconstants::SAML20_PREFIX,&schemaType
589 /** Builder that allows element/type override. */
590 #ifdef HAVE_COVARIANT_RETURNS
591 virtual KeyInfoConfirmationDataType* buildObject(
593 virtual xmltooling::XMLObject* buildObject(
595 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
598 /** Singleton builder. */
599 static KeyInfoConfirmationDataType* buildKeyInfoConfirmationDataType() {
600 const KeyInfoConfirmationDataTypeBuilder* b = dynamic_cast<const KeyInfoConfirmationDataTypeBuilder*>(
601 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,KeyInfoConfirmationDataType::TYPE_NAME))
604 #ifdef HAVE_COVARIANT_RETURNS
605 return b->buildObject();
607 return dynamic_cast<KeyInfoConfirmationDataType*>(b->buildObject());
609 throw xmltooling::XMLObjectException("Unable to obtain typed builder for KeyInfoConfirmationDataType.");
614 * Builder for Statement extension objects.
616 * This is customized to force the schema type to be specified.
618 class SAML_API StatementBuilder : public xmltooling::XMLObjectBuilder {
620 virtual ~StatementBuilder() {}
621 /** Builder that allows element/type override. */
622 #ifdef HAVE_COVARIANT_RETURNS
623 virtual Statement* buildObject(
625 virtual xmltooling::XMLObject* buildObject(
627 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
630 /** Singleton builder. */
631 static Statement* buildStatement(const xmltooling::QName& schemaType) {
632 const StatementBuilder* b = dynamic_cast<const StatementBuilder*>(
633 XMLObjectBuilder::getBuilder(xmltooling::QName(samlconstants::SAML20_NS,Statement::LOCAL_NAME))
636 #ifdef HAVE_COVARIANT_RETURNS
637 return b->buildObject(samlconstants::SAML20_NS, Statement::LOCAL_NAME, samlconstants::SAML20_PREFIX, &schemaType);
639 return dynamic_cast<Statement*>(b->buildObject(samlconstants::SAML20_NS, Statement::LOCAL_NAME, samlconstants::SAML20_PREFIX, &schemaType));
642 throw xmltooling::XMLObjectException("Unable to obtain typed builder for Statement.");
647 * Registers builders and validators for SAML 2.0 Assertion classes into the runtime.
649 void SAML_API registerAssertionClasses();
653 #endif /* __saml2_assertions_h__ */