X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2Fimpl%2FMetadataImpl.cpp;h=43162ec24feced97be7563cdc8d5b60b4fff7c3d;hb=b1614d3c1fc1f4230ab2a123f43994127c25462c;hp=f66ebfaeefb46a56d749f8b07bce874aa7e5ac97;hpb=335291aa66a9f8eae1a4604aa3502ccc948841e9;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/metadata/impl/MetadataImpl.cpp b/saml/saml2/metadata/impl/MetadataImpl.cpp index f66ebfa..43162ec 100644 --- a/saml/saml2/metadata/impl/MetadataImpl.cpp +++ b/saml/saml2/metadata/impl/MetadataImpl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006 Internet2 + * Copyright 2001-2007 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,9 +24,7 @@ #include "exceptions.h" #include "saml2/metadata/Metadata.h" -#include #include -#include #include #include #include @@ -43,6 +41,10 @@ using namespace xmlencryption; using namespace xmlsignature; using namespace xmltooling; using namespace std; +using xmlconstants::XMLSIG_NS; +using xmlconstants::XML_BOOL_NULL; +using samlconstants::SAML20_NS; +using samlconstants::SAML20MD_NS; #if defined (_MSC_VER) #pragma warning( push ) @@ -66,7 +68,6 @@ namespace opensaml { class SAML_DLLLOCAL localizedNameTypeImpl : public virtual localizedNameType, public AbstractSimpleElement, - public AbstractChildlessElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller @@ -97,23 +98,21 @@ namespace opensaml { } IMPL_XMLOBJECT_CLONE(localizedNameType); - IMPL_XMLOBJECT_CONTENT; IMPL_STRING_ATTRIB(Lang); protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Lang,LANG,XMLConstants::XML_NS); + MARSHALL_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Lang,LANG,XMLConstants::XML_NS); + PROC_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; class SAML_DLLLOCAL localizedURITypeImpl : public virtual localizedURIType, public AbstractSimpleElement, - public AbstractChildlessElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller @@ -144,16 +143,15 @@ namespace opensaml { } IMPL_XMLOBJECT_CLONE(localizedURIType); - IMPL_XMLOBJECT_CONTENT; IMPL_STRING_ATTRIB(Lang); protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Lang,LANG,XMLConstants::XML_NS); + MARSHALL_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Lang,LANG,XMLConstants::XML_NS); + PROC_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -239,7 +237,7 @@ namespace opensaml { }; class SAML_DLLLOCAL ExtensionsImpl : public virtual Extensions, - public AbstractElementProxy, + public AbstractComplexElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller @@ -252,22 +250,21 @@ namespace opensaml { } ExtensionsImpl(const ExtensionsImpl& src) - : AbstractXMLObject(src), AbstractElementProxy(src), AbstractDOMCachingXMLObject(src) { - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - getXMLObjects().push_back((*i)->clone()); - } - } + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + VectorOf(XMLObject) v=getUnknownXMLObjects(); + for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) + v.push_back((*i)->clone()); } IMPL_XMLOBJECT_CLONE(Extensions); + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { // Unknown child. const XMLCh* nsURI=root->getNamespaceURI(); - if (!XMLString::equals(nsURI,SAMLConstants::SAML20MD_NS) && nsURI && *nsURI) { - getXMLObjects().push_back(childXMLObject); + if (!XMLString::equals(nsURI,SAML20MD_NS) && nsURI && *nsURI) { + getUnknownXMLObjects().push_back(childXMLObject); return; } @@ -305,7 +302,8 @@ namespace opensaml { } OrganizationImpl(const OrganizationImpl& src) - : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { init(); if (src.getExtensions()) setExtensions(src.getExtensions()->cloneExtensions()); @@ -341,10 +339,10 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(OrganizationName,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(OrganizationDisplayName,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(OrganizationURL,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(OrganizationName,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(OrganizationDisplayName,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(OrganizationURL,SAML20MD_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -392,7 +390,8 @@ namespace opensaml { } ContactPersonImpl(const ContactPersonImpl& src) - : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { init(); if (src.getExtensions()) setExtensions(src.getExtensions()->cloneExtensions()); @@ -443,12 +442,12 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILD(Company,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILD(GivenName,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILD(SurName,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(EmailAddress,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(TelephoneNumber,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false); + PROC_TYPED_CHILD(Company,SAML20MD_NS,false); + PROC_TYPED_CHILD(GivenName,SAML20MD_NS,false); + PROC_TYPED_CHILD(SurName,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(EmailAddress,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(TelephoneNumber,SAML20MD_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -459,7 +458,6 @@ namespace opensaml { class SAML_DLLLOCAL AdditionalMetadataLocationImpl : public virtual AdditionalMetadataLocation, public AbstractSimpleElement, - public AbstractChildlessElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller @@ -484,7 +482,6 @@ namespace opensaml { } IMPL_XMLOBJECT_CLONE(AdditionalMetadataLocation); - IMPL_XMLOBJECT_CONTENT; IMPL_STRING_ATTRIB(Namespace); protected: @@ -520,7 +517,8 @@ namespace opensaml { init(); } - KeyDescriptorImpl(const KeyDescriptorImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + KeyDescriptorImpl(const KeyDescriptorImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setUse(src.getUse()); if (src.getKeyInfo()) @@ -544,8 +542,8 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_FOREIGN_CHILD(KeyInfo,xmlsignature,XMLConstants::XMLSIG_NS,false); - PROC_TYPED_FOREIGN_CHILDREN(EncryptionMethod,xmlencryption,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_FOREIGN_CHILD(KeyInfo,xmlsignature,XMLSIG_NS,false); + PROC_TYPED_FOREIGN_CHILDREN(EncryptionMethod,xmlencryption,SAML20MD_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -556,8 +554,8 @@ namespace opensaml { }; class SAML_DLLLOCAL EndpointTypeImpl : public virtual EndpointType, - public AbstractElementProxy, public AbstractAttributeExtensibleXMLObject, + public AbstractComplexElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller @@ -583,22 +581,23 @@ namespace opensaml { } EndpointTypeImpl(const EndpointTypeImpl& src) - : AbstractXMLObject(src), AbstractElementProxy(src), - AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), + AbstractAttributeExtensibleXMLObject(src), + AbstractComplexElement(src), + AbstractDOMCachingXMLObject(src) { setBinding(src.getBinding()); setLocation(src.getLocation()); setResponseLocation(src.getResponseLocation()); - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - getXMLObjects().push_back((*i)->clone()); - } - } + VectorOf(XMLObject) v=getUnknownXMLObjects(); + for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) + v.push_back((*i)->clone()); } IMPL_XMLOBJECT_CLONE(EndpointType); IMPL_STRING_ATTRIB(Binding); IMPL_STRING_ATTRIB(Location); IMPL_STRING_ATTRIB(ResponseLocation); + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { @@ -628,8 +627,8 @@ namespace opensaml { void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { // Unknown child. const XMLCh* nsURI=root->getNamespaceURI(); - if (!XMLString::equals(nsURI,SAMLConstants::SAML20MD_NS) && nsURI && *nsURI) { - getXMLObjects().push_back(childXMLObject); + if (!XMLString::equals(nsURI,SAML20MD_NS) && nsURI && *nsURI) { + getUnknownXMLObjects().push_back(childXMLObject); return; } AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); @@ -644,7 +643,7 @@ namespace opensaml { { void init() { m_Index=NULL; - m_isDefault=XMLConstants::XML_BOOL_NULL; + m_isDefault=XML_BOOL_NULL; } protected: @@ -909,7 +908,8 @@ namespace opensaml { } RoleDescriptorImpl(const RoleDescriptorImpl& src) - : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { init(); setID(src.getID()); setProtocolSupportEnumeration(src.getProtocolSupportEnumeration()); @@ -1034,11 +1034,11 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLConstants::XMLSIG_NS,false); - PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(KeyDescriptor,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILD(Organization,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(ContactPerson,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLSIG_NS,false); + PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(KeyDescriptor,SAML20MD_NS,false); + PROC_TYPED_CHILD(Organization,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(ContactPerson,SAML20MD_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -1118,10 +1118,10 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(ArtifactResolutionService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(SingleLogoutService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(ManageNameIDService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(NameIDFormat,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_CHILDREN(ArtifactResolutionService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(SingleLogoutService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(ManageNameIDService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false); RoleDescriptorImpl::processChildElement(childXMLObject,root); } }; @@ -1134,7 +1134,7 @@ namespace opensaml { list::iterator m_pos_AttributeProfile; void init() { - m_WantAuthnRequestsSigned=XMLConstants::XML_BOOL_NULL; + m_WantAuthnRequestsSigned=XML_BOOL_NULL; m_children.push_back(NULL); m_children.push_back(NULL); m_children.push_back(NULL); @@ -1224,11 +1224,11 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(SingleSignOnService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(NameIDMappingService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AssertionIDRequestService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AttributeProfile,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_FOREIGN_CHILDREN(Attribute,saml2,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILDREN(SingleSignOnService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(NameIDMappingService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AssertionIDRequestService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AttributeProfile,SAML20MD_NS,false); + PROC_TYPED_FOREIGN_CHILDREN(Attribute,saml2,SAML20_NS,false); SSODescriptorTypeImpl::processChildElement(childXMLObject,root); } }; @@ -1242,7 +1242,7 @@ namespace opensaml { { void init() { m_Name=m_NameFormat=m_FriendlyName=NULL; - m_isRequired=XMLConstants::XML_BOOL_NULL; + m_isRequired=XML_BOOL_NULL; } public: virtual ~RequestedAttributeImpl() { @@ -1257,7 +1257,8 @@ namespace opensaml { } RequestedAttributeImpl(const RequestedAttributeImpl& src) - : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { init(); setName(src.getName()); setNameFormat(src.getNameFormat()); @@ -1333,7 +1334,7 @@ namespace opensaml { void init() { m_Index=NULL; - m_isDefault=XMLConstants::XML_BOOL_NULL; + m_isDefault=XML_BOOL_NULL; m_children.push_back(NULL); m_children.push_back(NULL); m_pos_ServiceDescription=m_children.begin(); @@ -1352,7 +1353,7 @@ namespace opensaml { } AttributeConsumingServiceImpl(const AttributeConsumingServiceImpl& src) - : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setIndex(src.m_Index); isDefault(src.m_isDefault); @@ -1390,9 +1391,9 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(ServiceName,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(ServiceDescription,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(RequestedAttribute,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_CHILDREN(ServiceName,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(ServiceDescription,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(RequestedAttribute,SAML20MD_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -1408,8 +1409,8 @@ namespace opensaml { list::iterator m_pos_AssertionConsumerService; void init() { - m_AuthnRequestsSigned=XMLConstants::XML_BOOL_NULL; - m_WantAssertionsSigned=XMLConstants::XML_BOOL_NULL; + m_AuthnRequestsSigned=XML_BOOL_NULL; + m_WantAssertionsSigned=XML_BOOL_NULL; m_children.push_back(NULL); m_pos_AssertionConsumerService=m_pos_NameIDFormat; ++m_pos_AssertionConsumerService; @@ -1476,8 +1477,8 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AssertionConsumerService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AttributeConsumingService,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AssertionConsumerService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AttributeConsumingService,SAML20MD_NS,false); SSODescriptorTypeImpl::processChildElement(childXMLObject,root); } }; @@ -1537,9 +1538,9 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AuthnQueryService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AssertionIDRequestService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(NameIDFormat,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AuthnQueryService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AssertionIDRequestService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false); RoleDescriptorImpl::processChildElement(childXMLObject,root); } }; @@ -1599,9 +1600,9 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AuthzService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AssertionIDRequestService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(NameIDFormat,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AuthzService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AssertionIDRequestService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false); RoleDescriptorImpl::processChildElement(childXMLObject,root); } }; @@ -1683,11 +1684,11 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AttributeService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AssertionIDRequestService,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(NameIDFormat,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AttributeProfile,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_FOREIGN_CHILDREN(Attribute,saml2,SAMLConstants::SAML20_NS,false); + PROC_TYPED_CHILDREN(AttributeService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AssertionIDRequestService,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AttributeProfile,SAML20MD_NS,false); + PROC_TYPED_FOREIGN_CHILDREN(Attribute,saml2,SAML20_NS,false); RoleDescriptorImpl::processChildElement(childXMLObject,root); } }; @@ -1695,7 +1696,7 @@ namespace opensaml { class SAML_DLLLOCAL QueryDescriptorTypeImpl : public virtual QueryDescriptorType, public RoleDescriptorImpl { void init() { - m_WantAssertionsSigned=XMLConstants::XML_BOOL_NULL; + m_WantAssertionsSigned=XML_BOOL_NULL; m_children.push_back(NULL); m_pos_NameIDFormat=m_pos_ContactPerson; ++m_pos_NameIDFormat; @@ -1747,7 +1748,7 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(NameIDFormat,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_CHILDREN(NameIDFormat,SAML20MD_NS,false); RoleDescriptorImpl::processChildElement(childXMLObject,root); } }; @@ -1801,7 +1802,7 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AttributeConsumingService,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AttributeConsumingService,SAML20MD_NS,false); QueryDescriptorTypeImpl::processChildElement(childXMLObject,root); } }; @@ -1836,7 +1837,7 @@ namespace opensaml { protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(ActionNamespace,SAMLConstants::SAML20MD_QUERY_EXT_NS,false); + PROC_TYPED_CHILDREN(ActionNamespace,samlconstants::SAML20MD_QUERY_EXT_NS,false); QueryDescriptorTypeImpl::processChildElement(childXMLObject,root); } }; @@ -1880,7 +1881,8 @@ namespace opensaml { } AffiliationDescriptorImpl(const AffiliationDescriptorImpl& src) - : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { init(); setID(src.getID()); setAffiliationOwnerID(src.getAffiliationOwnerID()); @@ -1965,10 +1967,10 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLConstants::XMLSIG_NS,false); - PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AffiliateMember,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(KeyDescriptor,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLSIG_NS,false); + PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AffiliateMember,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(KeyDescriptor,SAML20MD_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -2025,7 +2027,8 @@ namespace opensaml { } EntityDescriptorImpl(const EntityDescriptorImpl& src) - : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { init(); setID(src.getID()); setEntityID(src.getEntityID()); @@ -2237,7 +2240,36 @@ namespace opensaml { return NULL; } - const RoleDescriptor* getRoleDescriptor(xmltooling::QName& qname, const XMLCh* protocol) const { + const RoleDescriptor* getRoleDescriptor(const xmltooling::QName& qname, const XMLCh* protocol) const { + // Check for "known" elements/types. + QName q; + q.setNamespaceURI(SAML20MD_NS); + q.setLocalPart(IDPSSODescriptor::LOCAL_NAME); + if (q == qname) + return getIDPSSODescriptor(protocol); + q.setLocalPart(SPSSODescriptor::LOCAL_NAME); + if (q == qname) + return getSPSSODescriptor(protocol); + q.setLocalPart(AuthnAuthorityDescriptor::LOCAL_NAME); + if (q == qname) + return getAuthnAuthorityDescriptor(protocol); + q.setLocalPart(AttributeAuthorityDescriptor::LOCAL_NAME); + if (q == qname) + return getAttributeAuthorityDescriptor(protocol); + q.setLocalPart(PDPDescriptor::LOCAL_NAME); + if (q == qname) + return getPDPDescriptor(protocol); + q.setNamespaceURI(samlconstants::SAML20MD_QUERY_EXT_NS); + q.setLocalPart(AuthnQueryDescriptorType::TYPE_NAME); + if (q == qname) + return getAuthnQueryDescriptorType(protocol); + q.setLocalPart(AttributeQueryDescriptorType::TYPE_NAME); + if (q == qname) + return getAttributeQueryDescriptorType(protocol); + q.setLocalPart(AuthzDecisionQueryDescriptorType::TYPE_NAME); + if (q == qname) + return getAuthzDecisionQueryDescriptorType(protocol); + for (vector::const_iterator i=m_RoleDescriptors.begin(); i!=m_RoleDescriptors.end(); i++) { if ((*i)->getSchemaType() && qname==(*((*i)->getSchemaType())) && (*i)->hasSupport(protocol) && (*i)->isValid()) return (*i); @@ -2255,21 +2287,21 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLConstants::XMLSIG_NS,false); - PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(IDPSSODescriptor,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(SPSSODescriptor,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AuthnAuthorityDescriptor,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AttributeAuthorityDescriptor,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(PDPDescriptor,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AuthnQueryDescriptorType,SAMLConstants::SAML20MD_QUERY_EXT_NS,false); - PROC_TYPED_CHILDREN(AttributeQueryDescriptorType,SAMLConstants::SAML20MD_QUERY_EXT_NS,false); - PROC_TYPED_CHILDREN(AuthzDecisionQueryDescriptorType,SAMLConstants::SAML20MD_QUERY_EXT_NS,false); - PROC_TYPED_CHILDREN(RoleDescriptor,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILD(AffiliationDescriptor,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILD(Organization,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(ContactPerson,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(AdditionalMetadataLocation,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLSIG_NS,false); + PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(IDPSSODescriptor,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(SPSSODescriptor,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AuthnAuthorityDescriptor,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AttributeAuthorityDescriptor,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(PDPDescriptor,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AuthnQueryDescriptorType,samlconstants::SAML20MD_QUERY_EXT_NS,false); + PROC_TYPED_CHILDREN(AttributeQueryDescriptorType,samlconstants::SAML20MD_QUERY_EXT_NS,false); + PROC_TYPED_CHILDREN(AuthzDecisionQueryDescriptorType,samlconstants::SAML20MD_QUERY_EXT_NS,false); + PROC_TYPED_CHILDREN(RoleDescriptor,SAML20MD_NS,false); + PROC_TYPED_CHILD(AffiliationDescriptor,SAML20MD_NS,false); + PROC_TYPED_CHILD(Organization,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(ContactPerson,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(AdditionalMetadataLocation,SAML20MD_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } @@ -2311,7 +2343,8 @@ namespace opensaml { init(); } - EntitiesDescriptorImpl(const EntitiesDescriptorImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + EntitiesDescriptorImpl(const EntitiesDescriptorImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setID(src.getID()); setName(src.getName()); @@ -2376,10 +2409,10 @@ namespace opensaml { } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLConstants::XMLSIG_NS,false); - PROC_TYPED_CHILD(Extensions,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(EntityDescriptor,SAMLConstants::SAML20MD_NS,false); - PROC_TYPED_CHILDREN(EntitiesDescriptor,SAMLConstants::SAML20MD_NS,false); + PROC_TYPED_FOREIGN_CHILD(Signature,xmlsignature,XMLSIG_NS,false); + PROC_TYPED_CHILD(Extensions,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(EntityDescriptor,SAML20MD_NS,false); + PROC_TYPED_CHILDREN(EntitiesDescriptor,SAML20MD_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); }