X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2Fimpl%2FMetadataImpl.cpp;h=b80adf2b0358f428e340877132fd22fa405d169f;hb=7960a4d0b7147bea207118a8f5e30eb69fcd67f6;hp=f6503ec99ab720e201a5effc16634d301fffde29;hpb=932cfaae2176c2eba1a9938dc420591a9551a7f3;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/metadata/impl/MetadataImpl.cpp b/saml/saml2/metadata/impl/MetadataImpl.cpp index f6503ec..b80adf2 100644 --- a/saml/saml2/metadata/impl/MetadataImpl.cpp +++ b/saml/saml2/metadata/impl/MetadataImpl.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2001-2007 Internet2 - * + * Copyright 2001-2010 Internet2 + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -16,36 +16,42 @@ /** * MetadataImpl.cpp - * - * Implementation classes for SAML 2.0 Assertions schema + * + * Implementation classes for SAML 2.0 Metadata schema. */ #include "internal.h" #include "exceptions.h" #include "saml2/metadata/Metadata.h" -#include "saml2/metadata/MetadataKeyInfoIterator.h" +#include "signature/ContentReference.h" #include #include +#include +#include #include #include #include +#include +#include +#include +#include +#include #include #include #include +#include +using namespace samlconstants; using namespace opensaml::saml2md; using namespace opensaml::saml2; -using namespace opensaml; 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,6 +72,9 @@ namespace opensaml { DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,ActionNamespace); DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,SourceID); + DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,IPHint); + DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,DomainHint); + DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,GeolocationHint); class SAML_DLLLOCAL localizedNameTypeImpl : public virtual localizedNameType, public AbstractSimpleElement, @@ -74,40 +83,56 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Lang=NULL; + m_Lang=nullptr; + m_LangPrefix=nullptr; } - + protected: localizedNameTypeImpl() { init(); } - + public: virtual ~localizedNameTypeImpl() { XMLString::release(&m_Lang); + XMLString::release(&m_LangPrefix); } - - localizedNameTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + localizedNameTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + localizedNameTypeImpl(const localizedNameTypeImpl& src) : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); setLang(src.getLang()); + if (src.m_LangPrefix) + m_LangPrefix = XMLString::replicate(src.m_LangPrefix); } - + IMPL_XMLOBJECT_CLONE(localizedNameType); - IMPL_STRING_ATTRIB(Lang); - + IMPL_XMLOBJECT_FOREIGN_ATTRIB(Lang,XMLCh); + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS); + if (m_Lang && *m_Lang) { + DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(xmlconstants::XML_NS,LANG_ATTRIB_NAME); + if (m_LangPrefix && *m_LangPrefix) + attr->setPrefix(m_LangPrefix); + attr->setNodeValue(m_Lang); + domElement->setAttributeNodeNS(attr); + } } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS); + if (XMLHelper::isNodeNamed(attribute, xmlconstants::XML_NS, LANG_ATTRIB_NAME)) { + setLang(attribute->getValue()); + const XMLCh* temp = attribute->getPrefix(); + if (temp && *temp && !XMLString::equals(temp, xmlconstants::XML_NS)) + m_LangPrefix = XMLString::replicate(temp); + return; + } AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -119,40 +144,56 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Lang=NULL; + m_Lang=nullptr; + m_LangPrefix=nullptr; } - + protected: localizedURITypeImpl() { init(); } - + public: virtual ~localizedURITypeImpl() { XMLString::release(&m_Lang); + XMLString::release(&m_LangPrefix); } - - localizedURITypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + localizedURITypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + localizedURITypeImpl(const localizedURITypeImpl& src) : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); setLang(src.getLang()); + if (src.m_LangPrefix) + m_LangPrefix = XMLString::replicate(src.m_LangPrefix); } - + IMPL_XMLOBJECT_CLONE(localizedURIType); - IMPL_STRING_ATTRIB(Lang); - + IMPL_XMLOBJECT_FOREIGN_ATTRIB(Lang,XMLCh); + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS); + if (m_Lang && *m_Lang) { + DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(xmlconstants::XML_NS,LANG_ATTRIB_NAME); + if (m_LangPrefix && *m_LangPrefix) + attr->setPrefix(m_LangPrefix); + attr->setNodeValue(m_Lang); + domElement->setAttributeNodeNS(attr); + } } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Lang,LANG,xmlconstants::XML_NS); + if (XMLHelper::isNodeNamed(attribute, xmlconstants::XML_NS, LANG_ATTRIB_NAME)) { + setLang(attribute->getValue()); + const XMLCh* temp = attribute->getPrefix(); + if (temp && *temp && !XMLString::equals(temp, xmlconstants::XML_NS)) + m_LangPrefix = XMLString::replicate(temp); + return; + } AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -161,28 +202,28 @@ namespace opensaml { { public: virtual ~OrganizationNameImpl() {} - - OrganizationNameImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + OrganizationNameImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + OrganizationNameImpl(const OrganizationNameImpl& src) : AbstractXMLObject(src), localizedNameTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(OrganizationName); localizedNameType* clonelocalizedNameType() const { return new OrganizationNameImpl(*this); } }; - + class SAML_DLLLOCAL OrganizationDisplayNameImpl : public virtual OrganizationDisplayName, public localizedNameTypeImpl { public: virtual ~OrganizationDisplayNameImpl() {} - - OrganizationDisplayNameImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + OrganizationDisplayNameImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + OrganizationDisplayNameImpl(const OrganizationDisplayNameImpl& src) : AbstractXMLObject(src), localizedNameTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(OrganizationDisplayName); localizedNameType* clonelocalizedNameType() const { return new OrganizationDisplayNameImpl(*this); @@ -193,12 +234,12 @@ namespace opensaml { { public: virtual ~OrganizationURLImpl() {} - - OrganizationURLImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + OrganizationURLImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + OrganizationURLImpl(const OrganizationURLImpl& src) : AbstractXMLObject(src), localizedURITypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(OrganizationURL); localizedURIType* clonelocalizedURIType() const { return new OrganizationURLImpl(*this); @@ -209,12 +250,12 @@ namespace opensaml { { public: virtual ~ServiceNameImpl() {} - - ServiceNameImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + ServiceNameImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + ServiceNameImpl(const ServiceNameImpl& src) : AbstractXMLObject(src), localizedNameTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(ServiceName); localizedNameType* clonelocalizedNameType() const { return new ServiceNameImpl(*this); @@ -225,12 +266,12 @@ namespace opensaml { { public: virtual ~ServiceDescriptionImpl() {} - - ServiceDescriptionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + ServiceDescriptionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + ServiceDescriptionImpl(const ServiceDescriptionImpl& src) : AbstractXMLObject(src), localizedNameTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(ServiceDescription); localizedNameType* clonelocalizedNameType() const { return new ServiceDescriptionImpl(*this); @@ -245,21 +286,21 @@ namespace opensaml { { public: virtual ~ExtensionsImpl() {} - - ExtensionsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + ExtensionsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - + ExtensionsImpl(const ExtensionsImpl& src) : 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. @@ -268,7 +309,7 @@ namespace opensaml { getUnknownXMLObjects().push_back(childXMLObject); return; } - + AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; @@ -282,12 +323,12 @@ namespace opensaml { { list::iterator m_pos_OrganizationDisplayName; list::iterator m_pos_OrganizationURL; - + void init() { - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_Extensions=NULL; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_Extensions=nullptr; m_pos_Extensions=m_children.begin(); m_pos_OrganizationDisplayName=m_pos_Extensions; ++m_pos_OrganizationDisplayName; @@ -296,12 +337,12 @@ namespace opensaml { } public: virtual ~OrganizationImpl() {} - - OrganizationImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + OrganizationImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + OrganizationImpl(const OrganizationImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { @@ -327,13 +368,13 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(Organization); IMPL_TYPED_CHILD(Extensions); IMPL_TYPED_CHILDREN(OrganizationName,m_pos_OrganizationDisplayName); IMPL_TYPED_CHILDREN(OrganizationDisplayName,m_pos_OrganizationURL); IMPL_TYPED_CHILDREN(OrganizationURL,m_children.end()); - + protected: void marshallAttributes(DOMElement* domElement) const { marshallExtensionAttributes(domElement); @@ -360,18 +401,18 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { list::iterator m_pos_TelephoneNumber; - + void init() { - m_ContactType=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_Extensions=NULL; - m_Company=NULL; - m_GivenName=NULL; - m_SurName=NULL; + m_ContactType=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_Extensions=nullptr; + m_Company=nullptr; + m_GivenName=nullptr; + m_SurName=nullptr; m_pos_Extensions=m_children.begin(); m_pos_Company=m_pos_Extensions; ++m_pos_Company; @@ -383,13 +424,15 @@ namespace opensaml { ++m_pos_TelephoneNumber; } public: - virtual ~ContactPersonImpl() {} - - ContactPersonImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + virtual ~ContactPersonImpl() { + XMLString::release(&m_ContactType); + } + + ContactPersonImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + ContactPersonImpl(const ContactPersonImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { @@ -402,7 +445,7 @@ namespace opensaml { setGivenName(src.getGivenName()->cloneGivenName()); if (src.getSurName()) setSurName(src.getSurName()->cloneSurName()); - + VectorOf(EmailAddress) v=getEmailAddresss(); for (vector::const_iterator i=src.m_EmailAddresss.begin(); i!=src.m_EmailAddresss.end(); i++) { if (*i) { @@ -416,7 +459,7 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(ContactPerson); IMPL_STRING_ATTRIB(ContactType); IMPL_TYPED_CHILD(Extensions); @@ -425,8 +468,8 @@ namespace opensaml { IMPL_TYPED_CHILD(SurName); IMPL_TYPED_CHILDREN(EmailAddress,m_pos_TelephoneNumber); IMPL_TYPED_CHILDREN(TelephoneNumber,m_children.end()); - - void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { + + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),CONTACTTYPE_ATTRIB_NAME)) { setContactType(value); @@ -438,7 +481,7 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(ContactType,CONTACTTYPE,NULL); + MARSHALL_STRING_ATTRIB(ContactType,CONTACTTYPE,nullptr); marshallExtensionAttributes(domElement); } @@ -464,34 +507,34 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Namespace=NULL; + m_Namespace=nullptr; } - + public: virtual ~AdditionalMetadataLocationImpl() { XMLString::release(&m_Namespace); } - - AdditionalMetadataLocationImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AdditionalMetadataLocationImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + AdditionalMetadataLocationImpl(const AdditionalMetadataLocationImpl& src) : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); } - + IMPL_XMLOBJECT_CLONE(AdditionalMetadataLocation); IMPL_STRING_ATTRIB(Namespace); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Namespace,NAMESPACE,NULL); + MARSHALL_STRING_ATTRIB(Namespace,NAMESPACE,nullptr); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Namespace,NAMESPACE,NULL); + PROC_STRING_ATTRIB(Namespace,NAMESPACE,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -503,21 +546,21 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Use=NULL; - m_KeyInfo=NULL; - m_children.push_back(NULL); + m_Use=nullptr; + m_KeyInfo=nullptr; + m_children.push_back(nullptr); m_pos_KeyInfo=m_children.begin(); } public: virtual ~KeyDescriptorImpl() { XMLString::release(&m_Use); } - - KeyDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + KeyDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + KeyDescriptorImpl(const KeyDescriptorImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); @@ -531,15 +574,15 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(KeyDescriptor); IMPL_STRING_ATTRIB(Use); IMPL_TYPED_FOREIGN_CHILD(KeyInfo,xmlsignature); IMPL_TYPED_FOREIGN_CHILDREN(EncryptionMethod,xmlencryption,m_children.end()); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Use,USE,NULL); + MARSHALL_STRING_ATTRIB(Use,USE,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -549,7 +592,7 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Use,USE,NULL); + PROC_STRING_ATTRIB(Use,USE,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -562,25 +605,25 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Binding=m_Location=m_ResponseLocation=NULL; + m_Binding=m_Location=m_ResponseLocation=nullptr; } - + protected: EndpointTypeImpl() { init(); } - + public: virtual ~EndpointTypeImpl() { XMLString::release(&m_Binding); XMLString::release(&m_Location); XMLString::release(&m_ResponseLocation); } - - EndpointTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + EndpointTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - + EndpointTypeImpl(const EndpointTypeImpl& src) : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), @@ -593,14 +636,14 @@ namespace opensaml { 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) { + + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),BINDING_ATTRIB_NAME)) { setBinding(value); @@ -619,9 +662,9 @@ namespace opensaml { } protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Binding,BINDING,NULL); - MARSHALL_STRING_ATTRIB(Location,LOCATION,NULL); - MARSHALL_STRING_ATTRIB(ResponseLocation,RESPONSELOCATION,NULL); + MARSHALL_STRING_ATTRIB(Binding,BINDING,nullptr); + MARSHALL_STRING_ATTRIB(Location,LOCATION,nullptr); + MARSHALL_STRING_ATTRIB(ResponseLocation,RESPONSELOCATION,nullptr); marshallExtensionAttributes(domElement); } @@ -643,10 +686,10 @@ namespace opensaml { class SAML_DLLLOCAL IndexedEndpointTypeImpl : public virtual IndexedEndpointType, public EndpointTypeImpl { void init() { - m_Index=NULL; + m_Index=nullptr; m_isDefault=XML_BOOL_NULL; } - + protected: IndexedEndpointTypeImpl() { init(); @@ -655,24 +698,24 @@ namespace opensaml { virtual ~IndexedEndpointTypeImpl() { XMLString::release(&m_Index); } - - IndexedEndpointTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + IndexedEndpointTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + IndexedEndpointTypeImpl(const IndexedEndpointTypeImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) { setIndex(src.m_Index); isDefault(src.m_isDefault); } - + IMPL_XMLOBJECT_CLONE(IndexedEndpointType); EndpointType* cloneEndpointType() const { return new IndexedEndpointTypeImpl(*this); } - + IMPL_INTEGER_ATTRIB(Index); IMPL_BOOLEAN_ATTRIB(isDefault); - void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),INDEX_ATTRIB_NAME)) { setIndex(value); @@ -685,11 +728,11 @@ namespace opensaml { } EndpointTypeImpl::setAttribute(qualifiedName, value, ID); } - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_INTEGER_ATTRIB(Index,INDEX,NULL); - MARSHALL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,NULL); + MARSHALL_INTEGER_ATTRIB(Index,INDEX,nullptr); + MARSHALL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,nullptr); EndpointTypeImpl::marshallAttributes(domElement); } }; @@ -698,12 +741,12 @@ namespace opensaml { { public: virtual ~ArtifactResolutionServiceImpl() {} - - ArtifactResolutionServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + ArtifactResolutionServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + ArtifactResolutionServiceImpl(const ArtifactResolutionServiceImpl& src) : AbstractXMLObject(src), IndexedEndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(ArtifactResolutionService); IndexedEndpointType* cloneIndexedEndpointType() const { return new ArtifactResolutionServiceImpl(*this); @@ -717,12 +760,12 @@ namespace opensaml { { public: virtual ~SingleLogoutServiceImpl() {} - - SingleLogoutServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + SingleLogoutServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + SingleLogoutServiceImpl(const SingleLogoutServiceImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(SingleLogoutService); EndpointType* cloneEndpointType() const { return new SingleLogoutServiceImpl(*this); @@ -733,12 +776,12 @@ namespace opensaml { { public: virtual ~ManageNameIDServiceImpl() {} - - ManageNameIDServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + ManageNameIDServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + ManageNameIDServiceImpl(const ManageNameIDServiceImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(ManageNameIDService); EndpointType* cloneEndpointType() const { return new ManageNameIDServiceImpl(*this); @@ -749,12 +792,12 @@ namespace opensaml { { public: virtual ~SingleSignOnServiceImpl() {} - - SingleSignOnServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + SingleSignOnServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + SingleSignOnServiceImpl(const SingleSignOnServiceImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(SingleSignOnService); EndpointType* cloneEndpointType() const { return new SingleSignOnServiceImpl(*this); @@ -765,28 +808,28 @@ namespace opensaml { { public: virtual ~NameIDMappingServiceImpl() {} - - NameIDMappingServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + NameIDMappingServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + NameIDMappingServiceImpl(const NameIDMappingServiceImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(NameIDMappingService); EndpointType* cloneEndpointType() const { return new NameIDMappingServiceImpl(*this); } }; - + class SAML_DLLLOCAL AssertionIDRequestServiceImpl : public virtual AssertionIDRequestService, public EndpointTypeImpl { public: virtual ~AssertionIDRequestServiceImpl() {} - - AssertionIDRequestServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AssertionIDRequestServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + AssertionIDRequestServiceImpl(const AssertionIDRequestServiceImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(AssertionIDRequestService); EndpointType* cloneEndpointType() const { return new AssertionIDRequestServiceImpl(*this); @@ -797,12 +840,12 @@ namespace opensaml { { public: virtual ~AssertionConsumerServiceImpl() {} - - AssertionConsumerServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AssertionConsumerServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + AssertionConsumerServiceImpl(const AssertionConsumerServiceImpl& src) : AbstractXMLObject(src), IndexedEndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(AssertionConsumerService); EndpointType* cloneEndpointType() const { return new AssertionConsumerServiceImpl(*this); @@ -816,12 +859,12 @@ namespace opensaml { { public: virtual ~AuthnQueryServiceImpl() {} - - AuthnQueryServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AuthnQueryServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + AuthnQueryServiceImpl(const AuthnQueryServiceImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(AuthnQueryService); EndpointType* cloneEndpointType() const { return new AuthnQueryServiceImpl(*this); @@ -832,12 +875,12 @@ namespace opensaml { { public: virtual ~AuthzServiceImpl() {} - - AuthzServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AuthzServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + AuthzServiceImpl(const AuthzServiceImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(AuthzService); EndpointType* cloneEndpointType() const { return new AuthzServiceImpl(*this); @@ -848,12 +891,12 @@ namespace opensaml { { public: virtual ~AttributeServiceImpl() {} - - AttributeServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AttributeServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + AttributeServiceImpl(const AttributeServiceImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(AttributeService); EndpointType* cloneEndpointType() const { return new AttributeServiceImpl(*this); @@ -869,15 +912,15 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_ID=m_ProtocolSupportEnumeration=m_ErrorURL=NULL; - m_ValidUntil=m_CacheDuration=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_Signature=NULL; - m_Extensions=NULL; - m_Organization=NULL; + m_ID=m_ProtocolSupportEnumeration=m_ErrorURL=nullptr; + m_ValidUntil=m_CacheDuration=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_Signature=nullptr; + m_Extensions=nullptr; + m_Organization=nullptr; m_pos_Signature=m_children.begin(); m_pos_Extensions=m_pos_Signature; ++m_pos_Extensions; @@ -886,14 +929,14 @@ namespace opensaml { m_pos_ContactPerson=m_pos_Organization; ++m_pos_ContactPerson; } - + protected: list::iterator m_pos_ContactPerson; RoleDescriptorImpl() { init(); } - + public: virtual ~RoleDescriptorImpl() { XMLString::release(&m_ID); @@ -902,12 +945,12 @@ namespace opensaml { delete m_ValidUntil; delete m_CacheDuration; } - - RoleDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + RoleDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + RoleDescriptorImpl(const RoleDescriptorImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { @@ -923,7 +966,7 @@ namespace opensaml { setExtensions(src.getExtensions()->cloneExtensions()); if (src.getOrganization()) setOrganization(src.getOrganization()->cloneOrganization()); - + VectorOf(KeyDescriptor) v=getKeyDescriptors(); for (vector::const_iterator i=src.m_KeyDescriptors.begin(); i!=src.m_KeyDescriptors.end(); i++) { if (*i) { @@ -947,7 +990,7 @@ namespace opensaml { Signature* getSignature() const { return m_Signature; } - + void setSignature(Signature* sig) { prepareForAssignment(m_Signature,sig); *m_pos_Signature=m_Signature=sig; @@ -955,39 +998,24 @@ namespace opensaml { if (m_Signature) m_Signature->setContentReference(new opensaml::ContentReference(*this)); } - - KeyInfoIterator* getKeyInfoIterator() const { - return new MetadataKeyInfoIterator(*this); - } - std::string getName() const { - const EntityDescriptor* parent = dynamic_cast(getParent()); - if (parent) { - char* ch = toUTF8(parent->getEntityID()); - if (ch) { - string s(ch); - delete[] ch; - return s; - } - } - return ""; - } - - IMPL_ID_ATTRIB(ID); + IMPL_ID_ATTRIB_EX(ID,ID,nullptr); IMPL_STRING_ATTRIB(ProtocolSupportEnumeration); IMPL_STRING_ATTRIB(ErrorURL); IMPL_DATETIME_ATTRIB(ValidUntil,SAMLTIME_MAX); - IMPL_DATETIME_ATTRIB(CacheDuration,0); + IMPL_DURATION_ATTRIB(CacheDuration,0); IMPL_TYPED_CHILD(Extensions); IMPL_TYPED_CHILDREN(KeyDescriptor,m_pos_Organization); IMPL_TYPED_CHILD(Organization); IMPL_TYPED_CHILDREN(ContactPerson,m_pos_ContactPerson); bool hasSupport(const XMLCh* protocol) const { + if (!protocol || !*protocol) + return true; if (m_ProtocolSupportEnumeration) { // Look for first character. - unsigned int len=XMLString::stringLen(protocol); - unsigned int pos=0; + xsecsize_t len=XMLString::stringLen(protocol); + xsecsize_t pos=0; int index=XMLString::indexOf(m_ProtocolSupportEnumeration,protocol[0],pos); while (index>=0) { // Only possible match is if it's the first character or a space comes before it. @@ -1014,8 +1042,30 @@ namespace opensaml { } return false; } - - void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { + + void addSupport(const XMLCh* protocol) { + if (hasSupport(protocol)) + return; + if (m_ProtocolSupportEnumeration && *m_ProtocolSupportEnumeration) { +#ifdef HAVE_GOOD_STL + xstring pse(m_ProtocolSupportEnumeration); + pse = pse + chSpace + protocol; + setProtocolSupportEnumeration(pse.c_str()); +#else + auto_ptr_char temp(m_ProtocolSupportEnumeration); + auto_ptr_char temp2(protocol); + string pse(temp.get()); + pse = pse + ' ' + temp2.get(); + auto_ptr_XMLCh temp3(pse.c_str()); + setProtocolSupportEnumeration(temp3.get()); +#endif + } + else { + setProtocolSupportEnumeration(protocol); + } + } + + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),ID_ATTRIB_NAME)) { setID(value); @@ -1042,12 +1092,17 @@ namespace opensaml { } protected: + void prepareForMarshalling() const { + if (m_Signature) + declareNonVisibleNamespaces(); + } + void marshallAttributes(DOMElement* domElement) const { - MARSHALL_ID_ATTRIB(ID,ID,NULL); - MARSHALL_STRING_ATTRIB(ProtocolSupportEnumeration,PROTOCOLSUPPORTENUMERATION,NULL); - MARSHALL_STRING_ATTRIB(ErrorURL,ERRORURL,NULL); - MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,NULL); - MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,NULL); + MARSHALL_ID_ATTRIB(ID,ID,nullptr); + MARSHALL_STRING_ATTRIB(ProtocolSupportEnumeration,PROTOCOLSUPPORTENUMERATION,nullptr); + MARSHALL_STRING_ATTRIB(ErrorURL,ERRORURL,nullptr); + MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,nullptr); + MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,nullptr); marshallExtensionAttributes(domElement); } @@ -1061,18 +1116,46 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_ID_ATTRIB(ID,ID,NULL); + PROC_ID_ATTRIB(ID,ID,nullptr); unmarshallExtensionAttribute(attribute); } }; + class SAML_DLLLOCAL RoleDescriptorTypeImpl : public virtual RoleDescriptorType, public RoleDescriptorImpl + { + public: + virtual ~RoleDescriptorTypeImpl() {} + + RoleDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + } + + RoleDescriptorTypeImpl(const RoleDescriptorTypeImpl& src) : AbstractXMLObject(src), RoleDescriptorImpl(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(RoleDescriptorType); + RoleDescriptor* cloneRoleDescriptor() const { + return new RoleDescriptorTypeImpl(*this); + } + + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); + + protected: + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { + getUnknownXMLObjects().push_back(childXMLObject); + } + }; + class SAML_DLLLOCAL SSODescriptorTypeImpl : public virtual SSODescriptorType, public RoleDescriptorImpl { void init() { - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_ArtifactResolutionService=m_pos_ContactPerson; ++m_pos_ArtifactResolutionService; m_pos_SingleLogoutService=m_pos_ArtifactResolutionService; @@ -1082,25 +1165,25 @@ namespace opensaml { m_pos_NameIDFormat=m_pos_ManageNameIDService; ++m_pos_NameIDFormat; } - + protected: list::iterator m_pos_ArtifactResolutionService; list::iterator m_pos_SingleLogoutService; list::iterator m_pos_ManageNameIDService; list::iterator m_pos_NameIDFormat; - + SSODescriptorTypeImpl() { init(); } - + public: virtual ~SSODescriptorTypeImpl() {} - - SSODescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + SSODescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + SSODescriptorTypeImpl(const SSODescriptorTypeImpl& src) : AbstractXMLObject(src), RoleDescriptorImpl(src) { init(); VectorOf(ArtifactResolutionService) v=getArtifactResolutionServices(); @@ -1128,7 +1211,7 @@ namespace opensaml { } } } - + IMPL_TYPED_CHILDREN(ArtifactResolutionService,m_pos_ArtifactResolutionService); IMPL_TYPED_CHILDREN(SingleLogoutService,m_pos_SingleLogoutService); IMPL_TYPED_CHILDREN(ManageNameIDService,m_pos_ManageNameIDService); @@ -1150,13 +1233,13 @@ namespace opensaml { list::iterator m_pos_NameIDMappingService; list::iterator m_pos_AssertionIDRequestService; list::iterator m_pos_AttributeProfile; - + void init() { m_WantAuthnRequestsSigned=XML_BOOL_NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_SingleSignOnService=m_pos_NameIDFormat; ++m_pos_SingleSignOnService; m_pos_NameIDMappingService=m_pos_SingleSignOnService; @@ -1166,15 +1249,15 @@ namespace opensaml { m_pos_AttributeProfile=m_pos_AssertionIDRequestService; ++m_pos_AttributeProfile; } - + public: virtual ~IDPSSODescriptorImpl() {} - - IDPSSODescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + IDPSSODescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + IDPSSODescriptorImpl(const IDPSSODescriptorImpl& src) : AbstractXMLObject(src), SSODescriptorTypeImpl(src) { init(); WantAuthnRequestsSigned(src.m_WantAuthnRequestsSigned); @@ -1209,7 +1292,7 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(IDPSSODescriptor); SSODescriptorType* cloneSSODescriptorType() const { return new IDPSSODescriptorImpl(*this); @@ -1217,7 +1300,7 @@ namespace opensaml { RoleDescriptor* cloneRoleDescriptor() const { return new IDPSSODescriptorImpl(*this); } - + IMPL_BOOLEAN_ATTRIB(WantAuthnRequestsSigned); IMPL_TYPED_CHILDREN(SingleSignOnService,m_pos_SingleSignOnService); IMPL_TYPED_CHILDREN(NameIDMappingService,m_pos_NameIDMappingService); @@ -1225,7 +1308,7 @@ namespace opensaml { IMPL_TYPED_CHILDREN(AttributeProfile,m_pos_AttributeProfile); IMPL_TYPED_FOREIGN_CHILDREN(Attribute,saml2,m_children.end()); - void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),WANTAUTHNREQUESTSSIGNED_ATTRIB_NAME)) { setWantAuthnRequestsSigned(value); @@ -1237,10 +1320,10 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_BOOLEAN_ATTRIB(WantAuthnRequestsSigned,WANTAUTHNREQUESTSSIGNED,NULL); + MARSHALL_BOOLEAN_ATTRIB(WantAuthnRequestsSigned,WANTAUTHNREQUESTSSIGNED,nullptr); RoleDescriptorImpl::marshallAttributes(domElement); } - + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { PROC_TYPED_CHILDREN(SingleSignOnService,SAML20MD_NS,false); PROC_TYPED_CHILDREN(NameIDMappingService,SAML20MD_NS,false); @@ -1259,7 +1342,7 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Name=m_NameFormat=m_FriendlyName=NULL; + m_Name=m_NameFormat=m_FriendlyName=nullptr; m_isRequired=XML_BOOL_NULL; } public: @@ -1268,12 +1351,12 @@ namespace opensaml { XMLString::release(&m_NameFormat); XMLString::release(&m_FriendlyName); } - - RequestedAttributeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + RequestedAttributeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + RequestedAttributeImpl(const RequestedAttributeImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { @@ -1289,19 +1372,19 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(RequestedAttribute); Attribute* cloneAttribute() const { return new RequestedAttributeImpl(*this); } - + IMPL_STRING_ATTRIB(Name); IMPL_STRING_ATTRIB(NameFormat); IMPL_STRING_ATTRIB(FriendlyName); IMPL_BOOLEAN_ATTRIB(isRequired); IMPL_XMLOBJECT_CHILDREN(AttributeValue,m_children.end()); - - void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { + + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),NAME_ATTRIB_NAME)) { setName(value); @@ -1325,10 +1408,10 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Name,NAME,NULL); - MARSHALL_STRING_ATTRIB(NameFormat,NAMEFORMAT,NULL); - MARSHALL_STRING_ATTRIB(FriendlyName,FRIENDLYNAME,NULL); - MARSHALL_BOOLEAN_ATTRIB(isRequired,ISREQUIRED,NULL); + MARSHALL_STRING_ATTRIB(Name,NAME,nullptr); + MARSHALL_STRING_ATTRIB(NameFormat,NAMEFORMAT,nullptr); + MARSHALL_STRING_ATTRIB(FriendlyName,FRIENDLYNAME,nullptr); + MARSHALL_BOOLEAN_ATTRIB(isRequired,ISREQUIRED,nullptr); marshallExtensionAttributes(domElement); } @@ -1349,12 +1432,12 @@ namespace opensaml { { list::iterator m_pos_ServiceDescription; list::iterator m_pos_RequestedAttribute; - + void init() { - m_Index=NULL; + m_Index=nullptr; m_isDefault=XML_BOOL_NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_ServiceDescription=m_children.begin(); m_pos_RequestedAttribute=m_pos_ServiceDescription; ++m_pos_RequestedAttribute; @@ -1364,12 +1447,12 @@ namespace opensaml { virtual ~AttributeConsumingServiceImpl() { XMLString::release(&m_Index); } - - AttributeConsumingServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AttributeConsumingServiceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + AttributeConsumingServiceImpl(const AttributeConsumingServiceImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); @@ -1394,18 +1477,18 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(AttributeConsumingService); IMPL_INTEGER_ATTRIB(Index); IMPL_BOOLEAN_ATTRIB(isDefault); IMPL_TYPED_CHILDREN(ServiceName,m_pos_ServiceDescription); IMPL_TYPED_CHILDREN(ServiceDescription,m_pos_RequestedAttribute); IMPL_TYPED_CHILDREN(RequestedAttribute,m_children.end()); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_INTEGER_ATTRIB(Index,INDEX,NULL); - MARSHALL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,NULL); + MARSHALL_INTEGER_ATTRIB(Index,INDEX,nullptr); + MARSHALL_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -1416,8 +1499,8 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_INTEGER_ATTRIB(Index,INDEX,NULL); - PROC_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,NULL); + PROC_INTEGER_ATTRIB(Index,INDEX,nullptr); + PROC_BOOLEAN_ATTRIB(isDefault,ISDEFAULT,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -1425,23 +1508,23 @@ namespace opensaml { class SAML_DLLLOCAL SPSSODescriptorImpl : public virtual SPSSODescriptor, public SSODescriptorTypeImpl { list::iterator m_pos_AssertionConsumerService; - + void init() { m_AuthnRequestsSigned=XML_BOOL_NULL; m_WantAssertionsSigned=XML_BOOL_NULL; - m_children.push_back(NULL); + m_children.push_back(nullptr); m_pos_AssertionConsumerService=m_pos_NameIDFormat; ++m_pos_AssertionConsumerService; } - + public: virtual ~SPSSODescriptorImpl() {} - - SPSSODescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + SPSSODescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + SPSSODescriptorImpl(const SPSSODescriptorImpl& src) : AbstractXMLObject(src), SSODescriptorTypeImpl(src) { init(); AuthnRequestsSigned(src.m_AuthnRequestsSigned); @@ -1459,7 +1542,7 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(SPSSODescriptor); SSODescriptorType* cloneSSODescriptorType() const { return cloneSPSSODescriptor(); @@ -1467,13 +1550,13 @@ namespace opensaml { RoleDescriptor* cloneRoleDescriptor() const { return cloneSPSSODescriptor(); } - + IMPL_BOOLEAN_ATTRIB(AuthnRequestsSigned); IMPL_BOOLEAN_ATTRIB(WantAssertionsSigned); IMPL_TYPED_CHILDREN(AssertionConsumerService,m_pos_AssertionConsumerService); IMPL_TYPED_CHILDREN(AttributeConsumingService,m_children.end()); - void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),AUTHNREQUESTSSIGNED_ATTRIB_NAME)) { setAuthnRequestsSigned(value); @@ -1489,11 +1572,11 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_BOOLEAN_ATTRIB(AuthnRequestsSigned,AUTHNREQUESTSSIGNED,NULL); - MARSHALL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,NULL); + MARSHALL_BOOLEAN_ATTRIB(AuthnRequestsSigned,AUTHNREQUESTSSIGNED,nullptr); + MARSHALL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,nullptr); RoleDescriptorImpl::marshallAttributes(domElement); } - + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { PROC_TYPED_CHILDREN(AssertionConsumerService,SAML20MD_NS,false); PROC_TYPED_CHILDREN(AttributeConsumingService,SAML20MD_NS,false); @@ -1505,24 +1588,24 @@ namespace opensaml { { list::iterator m_pos_AuthnQueryService; list::iterator m_pos_AssertionIDRequestService; - + void init() { - m_children.push_back(NULL); - m_children.push_back(NULL); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_AuthnQueryService=m_pos_ContactPerson; ++m_pos_AuthnQueryService; m_pos_AssertionIDRequestService=m_pos_AuthnQueryService; ++m_pos_AssertionIDRequestService; } - + public: virtual ~AuthnAuthorityDescriptorImpl() {} - - AuthnAuthorityDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AuthnAuthorityDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + AuthnAuthorityDescriptorImpl(const AuthnAuthorityDescriptorImpl& src) : AbstractXMLObject(src), RoleDescriptorImpl(src) { init(); VectorOf(AuthnQueryService) v=getAuthnQueryServices(); @@ -1544,12 +1627,12 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(AuthnAuthorityDescriptor); RoleDescriptor* cloneRoleDescriptor() const { return cloneAuthnAuthorityDescriptor(); } - + IMPL_TYPED_CHILDREN(AuthnQueryService,m_pos_AuthnQueryService); IMPL_TYPED_CHILDREN(AssertionIDRequestService,m_pos_AssertionIDRequestService); IMPL_TYPED_CHILDREN(NameIDFormat,m_children.end()); @@ -1567,24 +1650,24 @@ namespace opensaml { { list::iterator m_pos_AuthzService; list::iterator m_pos_AssertionIDRequestService; - + void init() { - m_children.push_back(NULL); - m_children.push_back(NULL); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_AuthzService=m_pos_ContactPerson; ++m_pos_AuthzService; m_pos_AssertionIDRequestService=m_pos_AuthzService; ++m_pos_AssertionIDRequestService; } - + public: virtual ~PDPDescriptorImpl() {} - - PDPDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + PDPDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + PDPDescriptorImpl(const PDPDescriptorImpl& src) : AbstractXMLObject(src), RoleDescriptorImpl(src) { init(); VectorOf(AuthzService) v=getAuthzServices(); @@ -1606,12 +1689,12 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(PDPDescriptor); RoleDescriptor* cloneRoleDescriptor() const { return clonePDPDescriptor(); } - + IMPL_TYPED_CHILDREN(AuthzService,m_pos_AuthzService); IMPL_TYPED_CHILDREN(AssertionIDRequestService,m_pos_AssertionIDRequestService); IMPL_TYPED_CHILDREN(NameIDFormat,m_children.end()); @@ -1631,12 +1714,12 @@ namespace opensaml { list::iterator m_pos_AssertionIDRequestService; list::iterator m_pos_NameIDFormat; list::iterator m_pos_AttributeProfile; - + void init() { - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_AttributeService=m_pos_ContactPerson; ++m_pos_AttributeService; m_pos_AssertionIDRequestService=m_pos_AttributeService; @@ -1646,15 +1729,15 @@ namespace opensaml { m_pos_AttributeProfile=m_pos_NameIDFormat; ++m_pos_AttributeProfile; } - + public: virtual ~AttributeAuthorityDescriptorImpl() {} - - AttributeAuthorityDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AttributeAuthorityDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + AttributeAuthorityDescriptorImpl(const AttributeAuthorityDescriptorImpl& src) : AbstractXMLObject(src), RoleDescriptorImpl(src) { init(); VectorOf(AttributeService) v=getAttributeServices(); @@ -1693,7 +1776,7 @@ namespace opensaml { RoleDescriptor* cloneRoleDescriptor() const { return cloneAttributeAuthorityDescriptor(); } - + IMPL_TYPED_CHILDREN(AttributeService,m_pos_AttributeService); IMPL_TYPED_CHILDREN(AssertionIDRequestService,m_pos_AssertionIDRequestService); IMPL_TYPED_CHILDREN(NameIDFormat,m_pos_NameIDFormat); @@ -1715,26 +1798,26 @@ namespace opensaml { { void init() { m_WantAssertionsSigned=XML_BOOL_NULL; - m_children.push_back(NULL); + m_children.push_back(nullptr); m_pos_NameIDFormat=m_pos_ContactPerson; ++m_pos_NameIDFormat; } - + protected: list::iterator m_pos_NameIDFormat; - + QueryDescriptorTypeImpl() { init(); } - + public: virtual ~QueryDescriptorTypeImpl() {} - - QueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + QueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + QueryDescriptorTypeImpl(const QueryDescriptorTypeImpl& src) : AbstractXMLObject(src), RoleDescriptorImpl(src) { init(); WantAssertionsSigned(src.m_WantAssertionsSigned); @@ -1745,11 +1828,11 @@ namespace opensaml { } } } - + IMPL_BOOLEAN_ATTRIB(WantAssertionsSigned); IMPL_TYPED_CHILDREN(NameIDFormat,m_pos_NameIDFormat); - void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),WANTASSERTIONSSIGNED_ATTRIB_NAME)) { setWantAssertionsSigned(value); @@ -1761,7 +1844,7 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,NULL); + MARSHALL_BOOLEAN_ATTRIB(WantAssertionsSigned,WANTASSERTIONSSIGNED,nullptr); RoleDescriptorImpl::marshallAttributes(domElement); } @@ -1775,12 +1858,12 @@ namespace opensaml { { public: virtual ~AuthnQueryDescriptorTypeImpl() {} - - AuthnQueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AuthnQueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + AuthnQueryDescriptorTypeImpl(const AuthnQueryDescriptorTypeImpl& src) : AbstractXMLObject(src), QueryDescriptorTypeImpl(src) {} - + IMPL_XMLOBJECT_CLONE(AuthnQueryDescriptorType); QueryDescriptorType* cloneQueryDescriptorType() const { return new AuthnQueryDescriptorTypeImpl(*this); @@ -1794,10 +1877,10 @@ namespace opensaml { { public: virtual ~AttributeQueryDescriptorTypeImpl() {} - - AttributeQueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AttributeQueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + AttributeQueryDescriptorTypeImpl(const AttributeQueryDescriptorTypeImpl& src) : AbstractXMLObject(src), QueryDescriptorTypeImpl(src) { VectorOf(AttributeConsumingService) w=getAttributeConsumingServices(); @@ -1807,7 +1890,7 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(AttributeQueryDescriptorType); QueryDescriptorType* cloneQueryDescriptorType() const { return new AttributeQueryDescriptorTypeImpl(*this); @@ -1815,7 +1898,7 @@ namespace opensaml { RoleDescriptor* cloneRoleDescriptor() const { return new AttributeQueryDescriptorTypeImpl(*this); } - + IMPL_TYPED_CHILDREN(AttributeConsumingService,m_children.end()); protected: @@ -1829,10 +1912,10 @@ namespace opensaml { { public: virtual ~AuthzDecisionQueryDescriptorTypeImpl() {} - - AuthzDecisionQueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AuthzDecisionQueryDescriptorTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - + AuthzDecisionQueryDescriptorTypeImpl(const AuthzDecisionQueryDescriptorTypeImpl& src) : AbstractXMLObject(src), QueryDescriptorTypeImpl(src) { VectorOf(ActionNamespace) w=getActionNamespaces(); @@ -1842,7 +1925,7 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(AuthzDecisionQueryDescriptorType); QueryDescriptorType* cloneQueryDescriptorType() const { return new AuthzDecisionQueryDescriptorTypeImpl(*this); @@ -1850,7 +1933,7 @@ namespace opensaml { RoleDescriptor* cloneRoleDescriptor() const { return new AuthzDecisionQueryDescriptorTypeImpl(*this); } - + IMPL_TYPED_CHILDREN(ActionNamespace,m_children.end()); protected: @@ -1871,20 +1954,20 @@ namespace opensaml { list::iterator m_pos_AffiliateMember; void init() { - m_ID=m_AffiliationOwnerID=NULL; - m_ValidUntil=m_CacheDuration=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_Signature=NULL; - m_Extensions=NULL; + m_ID=m_AffiliationOwnerID=nullptr; + m_ValidUntil=m_CacheDuration=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_Signature=nullptr; + m_Extensions=nullptr; m_pos_Signature=m_children.begin(); m_pos_Extensions=m_pos_Signature; ++m_pos_Extensions; m_pos_AffiliateMember=m_pos_Extensions; ++m_pos_AffiliateMember; } - + public: virtual ~AffiliationDescriptorImpl() { XMLString::release(&m_ID); @@ -1892,12 +1975,12 @@ namespace opensaml { delete m_ValidUntil; delete m_CacheDuration; } - - AffiliationDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AffiliationDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + AffiliationDescriptorImpl(const AffiliationDescriptorImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { @@ -1910,7 +1993,7 @@ namespace opensaml { setSignature(src.getSignature()->cloneSignature()); if (src.getExtensions()) setExtensions(src.getExtensions()->cloneExtensions()); - + VectorOf(KeyDescriptor) v=getKeyDescriptors(); for (vector::const_iterator i=src.m_KeyDescriptors.begin(); i!=src.m_KeyDescriptors.end(); i++) { if (*i) { @@ -1936,7 +2019,7 @@ namespace opensaml { Signature* getSignature() const { return m_Signature; } - + void setSignature(Signature* sig) { prepareForAssignment(m_Signature,sig); *m_pos_Signature=m_Signature=sig; @@ -1944,16 +2027,16 @@ namespace opensaml { if (m_Signature) m_Signature->setContentReference(new opensaml::ContentReference(*this)); } - - IMPL_ID_ATTRIB(ID); + + IMPL_ID_ATTRIB_EX(ID,ID,nullptr); IMPL_STRING_ATTRIB(AffiliationOwnerID); IMPL_DATETIME_ATTRIB(ValidUntil,SAMLTIME_MAX); - IMPL_DATETIME_ATTRIB(CacheDuration,0); + IMPL_DURATION_ATTRIB(CacheDuration,0); IMPL_TYPED_CHILD(Extensions); IMPL_TYPED_CHILDREN(AffiliateMember,m_pos_AffiliateMember); IMPL_TYPED_CHILDREN(KeyDescriptor,m_children.end()); - - void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { + + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),ID_ATTRIB_NAME)) { setID(value); @@ -1976,11 +2059,16 @@ namespace opensaml { } protected: + void prepareForMarshalling() const { + if (m_Signature) + declareNonVisibleNamespaces(); + } + void marshallAttributes(DOMElement* domElement) const { - MARSHALL_ID_ATTRIB(ID,ID,NULL); - MARSHALL_STRING_ATTRIB(AffiliationOwnerID,AFFILIATIONOWNERID,NULL); - MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,NULL); - MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,NULL); + MARSHALL_ID_ATTRIB(ID,ID,nullptr); + MARSHALL_STRING_ATTRIB(AffiliationOwnerID,AFFILIATIONOWNERID,nullptr); + MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,nullptr); + MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,nullptr); marshallExtensionAttributes(domElement); } @@ -1993,7 +2081,7 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_ID_ATTRIB(ID,ID,NULL); + PROC_ID_ATTRIB(ID,ID,nullptr); unmarshallExtensionAttribute(attribute); } }; @@ -2009,17 +2097,17 @@ namespace opensaml { list::iterator m_pos_ContactPerson; void init() { - m_ID=m_EntityID=NULL; - m_ValidUntil=m_CacheDuration=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_Signature=NULL; - m_Extensions=NULL; - m_AffiliationDescriptor=NULL; - m_Organization=NULL; + m_ID=m_EntityID=nullptr; + m_ValidUntil=m_CacheDuration=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_Signature=nullptr; + m_Extensions=nullptr; + m_AffiliationDescriptor=nullptr; + m_Organization=nullptr; m_pos_Signature=m_children.begin(); m_pos_Extensions=m_pos_Signature; ++m_pos_Extensions; @@ -2030,7 +2118,7 @@ namespace opensaml { m_pos_ContactPerson=m_pos_Organization; ++m_pos_ContactPerson; } - + public: virtual ~EntityDescriptorImpl() { XMLString::release(&m_ID); @@ -2038,12 +2126,12 @@ namespace opensaml { delete m_ValidUntil; delete m_CacheDuration; } - - EntityDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + EntityDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + EntityDescriptorImpl(const EntityDescriptorImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { @@ -2060,7 +2148,7 @@ namespace opensaml { setAffiliationDescriptor(src.getAffiliationDescriptor()->cloneAffiliationDescriptor()); if (src.getOrganization()) setOrganization(src.getOrganization()->cloneOrganization()); - + for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { if (*i) { IDPSSODescriptor* idp=dynamic_cast(*i); @@ -2068,7 +2156,7 @@ namespace opensaml { getIDPSSODescriptors().push_back(idp->cloneIDPSSODescriptor()); continue; } - + SPSSODescriptor* sp=dynamic_cast(*i); if (sp) { getSPSSODescriptors().push_back(sp->cloneSPSSODescriptor()); @@ -2092,7 +2180,7 @@ namespace opensaml { getPDPDescriptors().push_back(pdp->clonePDPDescriptor()); continue; } - + AuthnQueryDescriptorType* authnq=dynamic_cast(*i); if (authnq) { getAuthnQueryDescriptorTypes().push_back(authnq->cloneAuthnQueryDescriptorType()); @@ -2144,7 +2232,7 @@ namespace opensaml { Signature* getSignature() const { return m_Signature; } - + void setSignature(Signature* sig) { prepareForAssignment(m_Signature,sig); *m_pos_Signature=m_Signature=sig; @@ -2152,11 +2240,11 @@ namespace opensaml { if (m_Signature) m_Signature->setContentReference(new opensaml::ContentReference(*this)); } - - IMPL_ID_ATTRIB(ID); + + IMPL_ID_ATTRIB_EX(ID,ID,nullptr); IMPL_STRING_ATTRIB(EntityID); IMPL_DATETIME_ATTRIB(ValidUntil,SAMLTIME_MAX); - IMPL_DATETIME_ATTRIB(CacheDuration,0); + IMPL_DURATION_ATTRIB(CacheDuration,0); IMPL_TYPED_CHILD(Extensions); IMPL_TYPED_CHILDREN(RoleDescriptor,m_pos_AffiliationDescriptor); IMPL_TYPED_CHILDREN(IDPSSODescriptor,m_pos_AffiliationDescriptor); @@ -2171,8 +2259,8 @@ namespace opensaml { IMPL_TYPED_CHILD(Organization); IMPL_TYPED_CHILDREN(ContactPerson,m_pos_ContactPerson); IMPL_TYPED_CHILDREN(AdditionalMetadataLocation,m_children.end()); - - void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false) { + + void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) { if (!qualifiedName.hasNamespaceURI()) { if (XMLString::equals(qualifiedName.getLocalPart(),ID_ATTRIB_NAME)) { setID(value); @@ -2194,113 +2282,41 @@ namespace opensaml { AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID); } - const IDPSSODescriptor* getIDPSSODescriptor(const XMLCh* protocol) const { - for (vector::const_iterator i=m_IDPSSODescriptors.begin(); i!=m_IDPSSODescriptors.end(); i++) { - if ((*i)->hasSupport(protocol) && (*i)->isValid()) - return (*i); - } - return NULL; - } - - const SPSSODescriptor* getSPSSODescriptor(const XMLCh* protocol) const { - for (vector::const_iterator i=m_SPSSODescriptors.begin(); i!=m_SPSSODescriptors.end(); i++) { - if ((*i)->hasSupport(protocol) && (*i)->isValid()) - return (*i); - } - return NULL; - } - - const AuthnAuthorityDescriptor* getAuthnAuthorityDescriptor(const XMLCh* protocol) const { - for (vector::const_iterator i=m_AuthnAuthorityDescriptors.begin(); i!=m_AuthnAuthorityDescriptors.end(); i++) { - if ((*i)->hasSupport(protocol) && (*i)->isValid()) - return (*i); - } - return NULL; - } - - const AttributeAuthorityDescriptor* getAttributeAuthorityDescriptor(const XMLCh* protocol) const { - for (vector::const_iterator i=m_AttributeAuthorityDescriptors.begin(); i!=m_AttributeAuthorityDescriptors.end(); i++) { - if ((*i)->hasSupport(protocol) && (*i)->isValid()) - return (*i); - } - return NULL; - } - - const PDPDescriptor* getPDPDescriptor(const XMLCh* protocol) const { - for (vector::const_iterator i=m_PDPDescriptors.begin(); i!=m_PDPDescriptors.end(); i++) { - if ((*i)->hasSupport(protocol) && (*i)->isValid()) - return (*i); - } - return NULL; - } - - const AuthnQueryDescriptorType* getAuthnQueryDescriptorType(const XMLCh* protocol) const { - for (vector::const_iterator i=m_AuthnQueryDescriptorTypes.begin(); i!=m_AuthnQueryDescriptorTypes.end(); i++) { - if ((*i)->hasSupport(protocol) && (*i)->isValid()) - return (*i); - } - return NULL; - } - - const AttributeQueryDescriptorType* getAttributeQueryDescriptorType(const XMLCh* protocol) const { - for (vector::const_iterator i=m_AttributeQueryDescriptorTypes.begin(); i!=m_AttributeQueryDescriptorTypes.end(); i++) { - if ((*i)->hasSupport(protocol) && (*i)->isValid()) - return (*i); - } - return NULL; - } - - const AuthzDecisionQueryDescriptorType* getAuthzDecisionQueryDescriptorType(const XMLCh* protocol) const { - for (vector::const_iterator i=m_AuthzDecisionQueryDescriptorTypes.begin(); i!=m_AuthzDecisionQueryDescriptorTypes.end(); i++) { - if ((*i)->hasSupport(protocol) && (*i)->isValid()) - return (*i); - } - return NULL; - } - 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); - } - return NULL; + if (qname == IDPSSODescriptor::ELEMENT_QNAME) + return find_if(m_IDPSSODescriptors, isValidForProtocol(protocol)); + if (qname == SPSSODescriptor::ELEMENT_QNAME) + return find_if(m_SPSSODescriptors, isValidForProtocol(protocol)); + if (qname == AuthnAuthorityDescriptor::ELEMENT_QNAME) + return find_if(m_AuthnAuthorityDescriptors, isValidForProtocol(protocol)); + if (qname == AttributeAuthorityDescriptor::ELEMENT_QNAME) + return find_if(m_AttributeAuthorityDescriptors, isValidForProtocol(protocol)); + if (qname == PDPDescriptor::ELEMENT_QNAME) + return find_if(m_PDPDescriptors, isValidForProtocol(protocol)); + if (qname == AuthnQueryDescriptorType::TYPE_QNAME) + return find_if(m_AuthnQueryDescriptorTypes, isValidForProtocol(protocol)); + if (qname == AttributeQueryDescriptorType::TYPE_QNAME) + return find_if(m_AttributeQueryDescriptorTypes, isValidForProtocol(protocol)); + if (qname == AuthzDecisionQueryDescriptorType::TYPE_QNAME) + return find_if(m_AuthzDecisionQueryDescriptorTypes, isValidForProtocol(protocol)); + + vector::const_iterator i = + find_if(m_RoleDescriptors.begin(), m_RoleDescriptors.end(), ofTypeValidForProtocol(qname,protocol)); + return (i!=m_RoleDescriptors.end()) ? *i : nullptr; } protected: + void prepareForMarshalling() const { + if (m_Signature) + declareNonVisibleNamespaces(); + } + void marshallAttributes(DOMElement* domElement) const { - MARSHALL_ID_ATTRIB(ID,ID,NULL); - MARSHALL_STRING_ATTRIB(EntityID,ENTITYID,NULL); - MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,NULL); - MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,NULL); + MARSHALL_ID_ATTRIB(ID,ID,nullptr); + MARSHALL_STRING_ATTRIB(EntityID,ENTITYID,nullptr); + MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,nullptr); + MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,nullptr); marshallExtensionAttributes(domElement); } @@ -2324,7 +2340,7 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_ID_ATTRIB(ID,ID,NULL); + PROC_ID_ATTRIB(ID,ID,nullptr); unmarshallExtensionAttribute(attribute); } }; @@ -2337,17 +2353,17 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_ID=m_Name=NULL; - m_ValidUntil=m_CacheDuration=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_Signature=NULL; - m_Extensions=NULL; + m_ID=m_Name=nullptr; + m_ValidUntil=m_CacheDuration=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_Signature=nullptr; + m_Extensions=nullptr; m_pos_Signature=m_children.begin(); m_pos_Extensions=m_pos_Signature; ++m_pos_Extensions; } - + public: virtual ~EntitiesDescriptorImpl() { XMLString::release(&m_ID); @@ -2355,12 +2371,12 @@ namespace opensaml { delete m_ValidUntil; delete m_CacheDuration; } - - EntitiesDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + EntitiesDescriptorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + EntitiesDescriptorImpl(const EntitiesDescriptorImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); @@ -2372,7 +2388,7 @@ namespace opensaml { setSignature(src.getSignature()->cloneSignature()); if (src.getExtensions()) setExtensions(src.getExtensions()->cloneExtensions()); - + for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { if (*i) { EntityDescriptor* e=dynamic_cast(*i); @@ -2380,7 +2396,7 @@ namespace opensaml { getEntityDescriptors().push_back(e->cloneEntityDescriptor()); continue; } - + EntitiesDescriptor* es=dynamic_cast(*i); if (es) { getEntitiesDescriptors().push_back(es->cloneEntitiesDescriptor()); @@ -2401,7 +2417,7 @@ namespace opensaml { Signature* getSignature() const { return m_Signature; } - + void setSignature(Signature* sig) { prepareForAssignment(m_Signature,sig); *m_pos_Signature=m_Signature=sig; @@ -2409,21 +2425,26 @@ namespace opensaml { if (m_Signature) m_Signature->setContentReference(new opensaml::ContentReference(*this)); } - - IMPL_ID_ATTRIB(ID); + + IMPL_ID_ATTRIB_EX(ID,ID,nullptr); IMPL_STRING_ATTRIB(Name); IMPL_DATETIME_ATTRIB(ValidUntil,SAMLTIME_MAX); - IMPL_DATETIME_ATTRIB(CacheDuration,0); + IMPL_DURATION_ATTRIB(CacheDuration,0); IMPL_TYPED_CHILD(Extensions); IMPL_TYPED_CHILDREN(EntityDescriptor,m_children.end()); IMPL_TYPED_CHILDREN(EntitiesDescriptor,m_children.end()); - + protected: + void prepareForMarshalling() const { + if (m_Signature) + declareNonVisibleNamespaces(); + } + void marshallAttributes(DOMElement* domElement) const { - MARSHALL_ID_ATTRIB(ID,ID,NULL); - MARSHALL_STRING_ATTRIB(Name,NAME,NULL); - MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,NULL); - MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,NULL); + MARSHALL_ID_ATTRIB(ID,ID,nullptr); + MARSHALL_STRING_ATTRIB(Name,NAME,nullptr); + MARSHALL_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,nullptr); + MARSHALL_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -2435,10 +2456,469 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_ID_ATTRIB(ID,ID,NULL); - PROC_STRING_ATTRIB(Name,NAME,NULL); - PROC_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,NULL); - PROC_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,NULL); + PROC_ID_ATTRIB(ID,ID,nullptr); + PROC_STRING_ATTRIB(Name,NAME,nullptr); + PROC_DATETIME_ATTRIB(ValidUntil,VALIDUNTIL,nullptr); + PROC_DATETIME_ATTRIB(CacheDuration,CACHEDURATION,nullptr); + } + }; + + class SAML_DLLLOCAL DiscoveryResponseImpl : public virtual DiscoveryResponse, public IndexedEndpointTypeImpl + { + public: + virtual ~DiscoveryResponseImpl() {} + + DiscoveryResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} + + DiscoveryResponseImpl(const DiscoveryResponseImpl& src) : AbstractXMLObject(src), IndexedEndpointTypeImpl(src) {} + + IMPL_XMLOBJECT_CLONE(DiscoveryResponse); + IndexedEndpointType* cloneIndexedEndpointType() const { + return new DiscoveryResponseImpl(*this); + } + EndpointType* cloneEndpointType() const { + return new DiscoveryResponseImpl(*this); + } + }; + + class SAML_DLLLOCAL RequestInitiatorImpl : public virtual RequestInitiator, public EndpointTypeImpl + { + public: + virtual ~RequestInitiatorImpl() {} + + RequestInitiatorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} + + RequestInitiatorImpl(const RequestInitiatorImpl& src) : AbstractXMLObject(src), EndpointTypeImpl(src) {} + + IMPL_XMLOBJECT_CLONE(RequestInitiator); + EndpointType* cloneEndpointType() const { + return new RequestInitiatorImpl(*this); + } + }; + + class SAML_DLLLOCAL EntityAttributesImpl : public virtual EntityAttributes, + public AbstractComplexElement, + public AbstractDOMCachingXMLObject, + public AbstractXMLObjectMarshaller, + public AbstractXMLObjectUnmarshaller + { + public: + virtual ~EntityAttributesImpl() {} + + EntityAttributesImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + } + + EntityAttributesImpl(const EntityAttributesImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { + if (*i) { + Attribute* a=dynamic_cast(*i); + if (a) { + getAttributes().push_back(a->cloneAttribute()); + continue; + } + + saml2::Assertion* as=dynamic_cast(*i); + if (as) { + getAssertions().push_back(as->cloneAssertion()); + continue; + } + } + } + } + + IMPL_XMLOBJECT_CLONE(EntityAttributes); + + IMPL_TYPED_FOREIGN_CHILDREN(Attribute,saml2,m_children.end()); + IMPL_TYPED_FOREIGN_CHILDREN(Assertion,saml2,m_children.end()); + + protected: + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { + PROC_TYPED_FOREIGN_CHILDREN(Attribute,saml2,SAML20_NS,false); + PROC_TYPED_FOREIGN_CHILDREN(Assertion,saml2,SAML20_NS,false); + AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); + } + }; + + class SAML_DLLLOCAL DigestMethodImpl : public virtual DigestMethod, + public AbstractComplexElement, + public AbstractDOMCachingXMLObject, + public AbstractXMLObjectMarshaller, + public AbstractXMLObjectUnmarshaller + { + public: + virtual ~DigestMethodImpl() { + XMLString::release(&m_Algorithm); + } + + DigestMethodImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + m_Algorithm = nullptr; + } + + DigestMethodImpl(const DigestMethodImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + setAlgorithm(src.getAlgorithm()); + 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_STRING_ATTRIB(Algorithm); + + IMPL_XMLOBJECT_CLONE(DigestMethod); + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); + + protected: + void marshallAttributes(DOMElement* domElement) const { + MARSHALL_STRING_ATTRIB(Algorithm,ALGORITHM,nullptr); + } + + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { + // Unknown child. + getUnknownXMLObjects().push_back(childXMLObject); + } + + void processAttribute(const DOMAttr* attribute) { + PROC_STRING_ATTRIB(Algorithm,ALGORITHM,nullptr); + } + }; + + class SAML_DLLLOCAL SigningMethodImpl : public virtual SigningMethod, + public AbstractComplexElement, + public AbstractDOMCachingXMLObject, + public AbstractXMLObjectMarshaller, + public AbstractXMLObjectUnmarshaller + { + public: + virtual ~SigningMethodImpl() { + XMLString::release(&m_Algorithm); + XMLString::release(&m_MinKeySize); + XMLString::release(&m_MaxKeySize); + } + + SigningMethodImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + m_Algorithm = nullptr; + m_MinKeySize = nullptr; + m_MaxKeySize = nullptr; + } + + SigningMethodImpl(const SigningMethodImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + setAlgorithm(src.getAlgorithm()); + setMinKeySize(src.m_MinKeySize); + setMaxKeySize(src.m_MaxKeySize); + 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(SigningMethod); + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); + + IMPL_STRING_ATTRIB(Algorithm); + IMPL_INTEGER_ATTRIB(MinKeySize); + IMPL_INTEGER_ATTRIB(MaxKeySize); + + protected: + void marshallAttributes(DOMElement* domElement) const { + MARSHALL_STRING_ATTRIB(Algorithm,ALGORITHM,nullptr); + MARSHALL_INTEGER_ATTRIB(MinKeySize,MINKEYSIZE,nullptr); + MARSHALL_INTEGER_ATTRIB(MaxKeySize,MAXKEYSIZE,nullptr); + } + + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { + // Unknown child. + getUnknownXMLObjects().push_back(childXMLObject); + } + + void processAttribute(const DOMAttr* attribute) { + PROC_STRING_ATTRIB(Algorithm,ALGORITHM,nullptr); + PROC_INTEGER_ATTRIB(MinKeySize,MINKEYSIZE,nullptr); + PROC_INTEGER_ATTRIB(MaxKeySize,MAXKEYSIZE,nullptr); + } + }; + + class SAML_DLLLOCAL DisplayNameImpl : public virtual DisplayName, public localizedNameTypeImpl + { + public: + virtual ~DisplayNameImpl() {} + + DisplayNameImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} + + DisplayNameImpl(const DisplayNameImpl& src) : AbstractXMLObject(src), localizedNameTypeImpl(src) {} + + IMPL_XMLOBJECT_CLONE(DisplayName); + localizedNameType* clonelocalizedNameType() const { + return new DisplayNameImpl(*this); + } + }; + + class SAML_DLLLOCAL DescriptionImpl : public virtual Description, public localizedNameTypeImpl + { + public: + virtual ~DescriptionImpl() {} + + DescriptionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} + + DescriptionImpl(const DescriptionImpl& src) : AbstractXMLObject(src), localizedNameTypeImpl(src) {} + + IMPL_XMLOBJECT_CLONE(Description); + localizedNameType* clonelocalizedNameType() const { + return new DescriptionImpl(*this); + } + }; + + class SAML_DLLLOCAL InformationURLImpl : public virtual InformationURL, public localizedURITypeImpl + { + public: + virtual ~InformationURLImpl() {} + + InformationURLImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} + + InformationURLImpl(const InformationURLImpl& src) : AbstractXMLObject(src), localizedURITypeImpl(src) {} + + IMPL_XMLOBJECT_CLONE(InformationURL); + localizedURIType* clonelocalizedURIType() const { + return new InformationURLImpl(*this); + } + }; + + class SAML_DLLLOCAL PrivacyStatementURLImpl : public virtual PrivacyStatementURL, public localizedURITypeImpl + { + public: + virtual ~PrivacyStatementURLImpl() {} + + PrivacyStatementURLImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} + + PrivacyStatementURLImpl(const PrivacyStatementURLImpl& src) : AbstractXMLObject(src), localizedURITypeImpl(src) {} + + IMPL_XMLOBJECT_CLONE(PrivacyStatementURL); + localizedURIType* clonelocalizedURIType() const { + return new PrivacyStatementURLImpl(*this); + } + }; + + class SAML_DLLLOCAL LogoImpl : public virtual Logo, + public AbstractSimpleElement, + public AbstractDOMCachingXMLObject, + public AbstractXMLObjectMarshaller, + public AbstractXMLObjectUnmarshaller + { + void init() { + m_Lang=nullptr; + m_LangPrefix=nullptr; + m_Height=nullptr; + m_Width=nullptr; + } + + protected: + LogoImpl() { + init(); + } + + public: + virtual ~LogoImpl() { + XMLString::release(&m_Lang); + XMLString::release(&m_LangPrefix); + XMLString::release(&m_Height); + XMLString::release(&m_Width); + } + + LogoImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + init(); + } + + LogoImpl(const LogoImpl& src) + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { + init(); + setLang(src.getLang()); + if (src.m_LangPrefix) + m_LangPrefix = XMLString::replicate(src.m_LangPrefix); + setHeight(src.m_Height); + setWidth(src.m_Width); + } + + IMPL_XMLOBJECT_CLONE(Logo); + IMPL_XMLOBJECT_FOREIGN_ATTRIB(Lang,XMLCh); + IMPL_INTEGER_ATTRIB(Height); + IMPL_INTEGER_ATTRIB(Width); + + protected: + void marshallAttributes(DOMElement* domElement) const { + if (m_Lang && *m_Lang) { + DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(xmlconstants::XML_NS,LANG_ATTRIB_NAME); + if (m_LangPrefix && *m_LangPrefix) + attr->setPrefix(m_LangPrefix); + attr->setNodeValue(m_Lang); + domElement->setAttributeNodeNS(attr); + } + MARSHALL_INTEGER_ATTRIB(Height,HEIGHT,nullptr); + MARSHALL_INTEGER_ATTRIB(Width,WIDTH,nullptr); + } + + void processAttribute(const DOMAttr* attribute) { + if (XMLHelper::isNodeNamed(attribute, xmlconstants::XML_NS, LANG_ATTRIB_NAME)) { + setLang(attribute->getValue()); + const XMLCh* temp = attribute->getPrefix(); + if (temp && *temp && !XMLString::equals(temp, xmlconstants::XML_NS)) + m_LangPrefix = XMLString::replicate(temp); + return; + } + PROC_INTEGER_ATTRIB(Height,HEIGHT,nullptr); + PROC_INTEGER_ATTRIB(Width,WIDTH,nullptr); + AbstractXMLObjectUnmarshaller::processAttribute(attribute); + } + }; + + class SAML_DLLLOCAL UIInfoImpl : public virtual UIInfo, + public AbstractComplexElement, + public AbstractDOMCachingXMLObject, + public AbstractXMLObjectMarshaller, + public AbstractXMLObjectUnmarshaller + { + public: + virtual ~UIInfoImpl() {} + + UIInfoImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + } + + UIInfoImpl(const UIInfoImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { + if (*i) { + DisplayName* dn=dynamic_cast(*i); + if (dn) { + getDisplayNames().push_back(dn->cloneDisplayName()); + continue; + } + + Description* des=dynamic_cast(*i); + if (des) { + getDescriptions().push_back(des->cloneDescription()); + continue; + } + + Logo* logo=dynamic_cast(*i); + if (logo) { + getLogos().push_back(logo->cloneLogo()); + continue; + } + + InformationURL* inf=dynamic_cast(*i); + if (inf) { + getInformationURLs().push_back(inf->cloneInformationURL()); + continue; + } + + PrivacyStatementURL* priv=dynamic_cast(*i); + if (priv) { + getPrivacyStatementURLs().push_back(priv->clonePrivacyStatementURL()); + continue; + } + + getUnknownXMLObjects().push_back((*i)->clone()); + } + } + } + + IMPL_XMLOBJECT_CLONE(UIInfo); + IMPL_TYPED_CHILDREN(DisplayName,m_children.end()); + IMPL_TYPED_CHILDREN(Description,m_children.end()); + IMPL_TYPED_CHILDREN(Logo,m_children.end()); + IMPL_TYPED_CHILDREN(InformationURL,m_children.end()); + IMPL_TYPED_CHILDREN(PrivacyStatementURL,m_children.end()); + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); + + protected: + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { + PROC_TYPED_CHILDREN(DisplayName,SAML20MD_UI_NS,false); + PROC_TYPED_CHILDREN(Description,SAML20MD_UI_NS,false); + PROC_TYPED_CHILDREN(Logo,SAML20MD_UI_NS,false); + PROC_TYPED_CHILDREN(InformationURL,SAML20MD_UI_NS,false); + PROC_TYPED_CHILDREN(PrivacyStatementURL,SAML20MD_UI_NS,false); + + // Unknown child. + const XMLCh* nsURI=root->getNamespaceURI(); + if (!XMLString::equals(nsURI,SAML20MD_UI_NS) && nsURI && *nsURI) { + getUnknownXMLObjects().push_back(childXMLObject); + return; + } + + AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); + } + }; + + class SAML_DLLLOCAL DiscoHintsImpl : public virtual DiscoHints, + public AbstractComplexElement, + public AbstractDOMCachingXMLObject, + public AbstractXMLObjectMarshaller, + public AbstractXMLObjectUnmarshaller + { + public: + virtual ~DiscoHintsImpl() {} + + DiscoHintsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + } + + DiscoHintsImpl(const DiscoHintsImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { + if (*i) { + IPHint* ip=dynamic_cast(*i); + if (ip) { + getIPHints().push_back(ip->cloneIPHint()); + continue; + } + + DomainHint* dom=dynamic_cast(*i); + if (dom) { + getDomainHints().push_back(dom->cloneDomainHint()); + continue; + } + + GeolocationHint* geo=dynamic_cast(*i); + if (geo) { + getGeolocationHints().push_back(geo->cloneGeolocationHint()); + continue; + } + + getUnknownXMLObjects().push_back((*i)->clone()); + } + } + } + + IMPL_XMLOBJECT_CLONE(DiscoHints); + IMPL_TYPED_CHILDREN(IPHint,m_children.end()); + IMPL_TYPED_CHILDREN(DomainHint,m_children.end()); + IMPL_TYPED_CHILDREN(GeolocationHint,m_children.end()); + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); + + protected: + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { + PROC_TYPED_CHILDREN(IPHint,SAML20MD_UI_NS,false); + PROC_TYPED_CHILDREN(DomainHint,SAML20MD_UI_NS,false); + PROC_TYPED_CHILDREN(GeolocationHint,SAML20MD_UI_NS,false); + + // Unknown child. + const XMLCh* nsURI=root->getNamespaceURI(); + if (!XMLString::equals(nsURI,SAML20MD_UI_NS) && nsURI && *nsURI) { + getUnknownXMLObjects().push_back(childXMLObject); + return; + } + + AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; @@ -2449,6 +2929,15 @@ namespace opensaml { #pragma warning( pop ) #endif +IMPL_ELEMENT_QNAME(IDPSSODescriptor, SAML20MD_NS, SAML20MD_PREFIX); +IMPL_ELEMENT_QNAME(SPSSODescriptor, SAML20MD_NS, SAML20MD_PREFIX); +IMPL_ELEMENT_QNAME(AuthnAuthorityDescriptor, SAML20MD_NS, SAML20MD_PREFIX); +IMPL_ELEMENT_QNAME(AttributeAuthorityDescriptor, SAML20MD_NS, SAML20MD_PREFIX); +IMPL_ELEMENT_QNAME(PDPDescriptor, SAML20MD_NS, SAML20MD_PREFIX); +IMPL_TYPE_QNAME(AuthnQueryDescriptorType, SAML20MD_QUERY_EXT_NS, SAML20MD_QUERY_EXT_PREFIX); +IMPL_TYPE_QNAME(AttributeQueryDescriptorType, SAML20MD_QUERY_EXT_NS, SAML20MD_QUERY_EXT_PREFIX); +IMPL_TYPE_QNAME(AuthzDecisionQueryDescriptorType, SAML20MD_QUERY_EXT_NS, SAML20MD_QUERY_EXT_PREFIX); + // Builder Implementations IMPL_XMLOBJECTBUILDER(AdditionalMetadataLocation); @@ -2499,6 +2988,127 @@ IMPL_XMLOBJECTBUILDER(TelephoneNumber); IMPL_XMLOBJECTBUILDER(ActionNamespace); IMPL_XMLOBJECTBUILDER(SourceID); +IMPL_XMLOBJECTBUILDER(DiscoveryResponse); +IMPL_XMLOBJECTBUILDER(RequestInitiator); +IMPL_XMLOBJECTBUILDER(EntityAttributes); +IMPL_XMLOBJECTBUILDER(DigestMethod); +IMPL_XMLOBJECTBUILDER(SigningMethod); +IMPL_XMLOBJECTBUILDER(DisplayName); +IMPL_XMLOBJECTBUILDER(Description); +IMPL_XMLOBJECTBUILDER(Logo); +IMPL_XMLOBJECTBUILDER(InformationURL); +IMPL_XMLOBJECTBUILDER(PrivacyStatementURL); +IMPL_XMLOBJECTBUILDER(UIInfo); +IMPL_XMLOBJECTBUILDER(IPHint); +IMPL_XMLOBJECTBUILDER(DomainHint); +IMPL_XMLOBJECTBUILDER(GeolocationHint); +IMPL_XMLOBJECTBUILDER(DiscoHints); + +#ifdef HAVE_COVARIANT_RETURNS +RoleDescriptor* RoleDescriptorBuilder::buildObject( +#else +xmltooling::XMLObject* RoleDescriptorBuilder::buildObject( +#endif + const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType + ) const +{ + return new RoleDescriptorTypeImpl(nsURI,localName,prefix,schemaType); +} + +const DigestMethod* RoleDescriptor::getDigestMethod() const +{ + bool roleLevel = false; + XMLToolingConfig& conf = XMLToolingConfig::getConfig(); + + if (getExtensions()) { + const vector& exts = const_cast(getExtensions())->getUnknownXMLObjects(); + for (vector::const_iterator i = exts.begin(); i != exts.end(); ++i) { + const opensaml::saml2md::DigestMethod* dm = dynamic_cast(*i); + if (dm) { + if (dm->getAlgorithm() && conf.isXMLAlgorithmSupported(dm->getAlgorithm(), XMLToolingConfig::ALGTYPE_DIGEST)) + return dm; + roleLevel = true; + } + } + } + + if (!roleLevel) { + const EntityDescriptor* entity = dynamic_cast(getParent()); + if (entity && entity->getExtensions()) { + const vector& exts = const_cast(entity->getExtensions())->getUnknownXMLObjects(); + for (vector::const_iterator i = exts.begin(); i != exts.end(); ++i) { + const opensaml::saml2md::DigestMethod* dm = dynamic_cast(*i); + if (dm && dm->getAlgorithm() && conf.isXMLAlgorithmSupported(dm->getAlgorithm(), XMLToolingConfig::ALGTYPE_DIGEST)) + return dm; + } + } + } + + return nullptr; +} + +pair RoleDescriptor::getSigningMethod(const CredentialResolver& resolver, CredentialCriteria& cc) const +{ + bool roleLevel = false; + XMLToolingConfig& conf = XMLToolingConfig::getConfig(); + + if (getExtensions()) { + const vector& exts = const_cast(getExtensions())->getUnknownXMLObjects(); + for (vector::const_iterator i = exts.begin(); i != exts.end(); ++i) { + const SigningMethod* sm = dynamic_cast(*i); + if (sm) { + roleLevel = true; + if (sm->getAlgorithm() && conf.isXMLAlgorithmSupported(sm->getAlgorithm(), XMLToolingConfig::ALGTYPE_SIGN)) { + cc.setXMLAlgorithm(sm->getAlgorithm()); + pair minsize = sm->getMinKeySize(), maxsize = sm->getMaxKeySize(); + if (minsize.first || maxsize.first) { + cc.setKeySize(minsize.first ? minsize.second : 0); + cc.setMaxKeySize(maxsize.first ? maxsize.second : UINT_MAX); + } + else { + cc.setKeySize(0); + cc.setMaxKeySize(0); + } + const Credential* cred = resolver.resolve(&cc); + if (cred) + return make_pair(sm, cred); + } + } + } + } + + if (!roleLevel) { + const EntityDescriptor* entity = dynamic_cast(getParent()); + if (entity && entity->getExtensions()) { + const vector& exts = const_cast(entity->getExtensions())->getUnknownXMLObjects(); + for (vector::const_iterator i = exts.begin(); i != exts.end(); ++i) { + const SigningMethod* sm = dynamic_cast(*i); + if (sm) { + if (sm->getAlgorithm() && conf.isXMLAlgorithmSupported(sm->getAlgorithm(), XMLToolingConfig::ALGTYPE_SIGN)) { + cc.setXMLAlgorithm(sm->getAlgorithm()); + pair minsize = sm->getMinKeySize(), maxsize = sm->getMaxKeySize(); + if (minsize.first || maxsize.first) { + cc.setKeySize(minsize.first ? minsize.second : 0); + cc.setMaxKeySize(maxsize.first ? maxsize.second : UINT_MAX); + } + else { + cc.setKeySize(0); + cc.setMaxKeySize(0); + } + const Credential* cred = resolver.resolve(&cc); + if (cred) + return make_pair(sm, cred); + } + } + } + } + } + + cc.setKeySize(0); + cc.setMaxKeySize(0); + cc.setXMLAlgorithm(nullptr); + return pair(nullptr, resolver.resolve(&cc)); +} const XMLCh ActionNamespace::LOCAL_NAME[] = UNICODE_LITERAL_15(A,c,t,i,o,n,N,a,m,e,s,p,a,c,e); const XMLCh AdditionalMetadataLocation::LOCAL_NAME[] = UNICODE_LITERAL_26(A,d,d,i,t,i,o,n,a,l,M,e,t,a,d,a,t,a,L,o,c,a,t,i,o,n); @@ -2540,6 +3150,15 @@ const XMLCh ContactPerson::CONTACT_SUPPORT[] = UNICODE_LITERAL_7(s,u,p, const XMLCh ContactPerson::CONTACT_ADMINISTRATIVE[] = UNICODE_LITERAL_14(a,d,m,i,n,i,s,t,r,a,t,i,v,e); const XMLCh ContactPerson::CONTACT_BILLING[] = UNICODE_LITERAL_7(b,i,l,l,i,n,g); const XMLCh ContactPerson::CONTACT_OTHER[] = UNICODE_LITERAL_5(o,t,h,e,r); +const XMLCh Description::LOCAL_NAME[] = UNICODE_LITERAL_11(D,e,s,c,r,i,p,t,i,o,n); +const XMLCh DigestMethod::LOCAL_NAME[] = UNICODE_LITERAL_12(D,i,g,e,s,t,M,e,t,h,o,d); +const XMLCh DigestMethod::TYPE_NAME[] = UNICODE_LITERAL_16(D,i,g,e,s,t,M,e,t,h,o,d,T,y,p,e); +const XMLCh DigestMethod::ALGORITHM_ATTRIB_NAME[] = UNICODE_LITERAL_9(A,l,g,o,r,i,t,h,m); +const XMLCh DiscoHints::LOCAL_NAME[] = UNICODE_LITERAL_10(D,i,s,c,o,H,i,n,t,s); +const XMLCh DiscoHints::TYPE_NAME[] = UNICODE_LITERAL_14(D,i,s,c,o,H,i,n,t,s,T,y,p,e); +const XMLCh DiscoveryResponse::LOCAL_NAME[] = UNICODE_LITERAL_17(D,i,s,c,o,v,e,r,y,R,e,s,p,o,n,s,e); +const XMLCh DisplayName::LOCAL_NAME[] = UNICODE_LITERAL_11(D,i,s,p,l,a,y,N,a,m,e); +const XMLCh DomainHint::LOCAL_NAME[] = UNICODE_LITERAL_10(D,o,m,a,i,n,H,i,n,t); const XMLCh EmailAddress::LOCAL_NAME[] = UNICODE_LITERAL_12(E,m,a,i,l,A,d,d,r,e,s,s); const XMLCh EndpointType::LOCAL_NAME[] = {chNull}; const XMLCh EndpointType::TYPE_NAME[] = UNICODE_LITERAL_12(E,n,d,p,o,i,n,t,T,y,p,e); @@ -2554,8 +3173,11 @@ const XMLCh EntityDescriptor::LOCAL_NAME[] = UNICODE_LITERAL_16(E,n,t const XMLCh EntityDescriptor::TYPE_NAME[] = UNICODE_LITERAL_20(E,n,t,i,t,y,D,e,s,c,r,i,p,t,o,r,T,y,p,e); const XMLCh EntityDescriptor::ID_ATTRIB_NAME[] = UNICODE_LITERAL_2(I,D); const XMLCh EntityDescriptor::ENTITYID_ATTRIB_NAME[] = UNICODE_LITERAL_8(e,n,t,i,t,y,I,D); +const XMLCh EntityAttributes::LOCAL_NAME[] = UNICODE_LITERAL_16(E,n,t,i,t,y,A,t,t,r,i,b,u,t,e,s); +const XMLCh EntityAttributes::TYPE_NAME[] = UNICODE_LITERAL_20(E,n,t,i,t,y,A,t,t,r,i,b,u,t,e,s,T,y,p,e); const XMLCh Extensions::LOCAL_NAME[] = UNICODE_LITERAL_10(E,x,t,e,n,s,i,o,n,s); const XMLCh Extensions::TYPE_NAME[] = UNICODE_LITERAL_14(E,x,t,e,n,s,i,o,n,s,T,y,p,e); +const XMLCh GeolocationHint::LOCAL_NAME[] = UNICODE_LITERAL_15(G,e,o,l,o,c,a,t,i,o,n,H,i,n,t); const XMLCh GivenName::LOCAL_NAME[] = UNICODE_LITERAL_9(G,i,v,e,n,N,a,m,e); const XMLCh IDPSSODescriptor::LOCAL_NAME[] = UNICODE_LITERAL_16(I,D,P,S,S,O,D,e,s,c,r,i,p,t,o,r); const XMLCh IDPSSODescriptor::TYPE_NAME[] = UNICODE_LITERAL_20(I,D,P,S,S,O,D,e,s,c,r,i,p,t,o,r,T,y,p,e); @@ -2564,11 +3186,18 @@ const XMLCh IndexedEndpointType::LOCAL_NAME[] = {chNull}; const XMLCh IndexedEndpointType::TYPE_NAME[] = UNICODE_LITERAL_19(I,n,d,e,x,e,d,E,n,d,p,o,i,n,t,T,y,p,e); const XMLCh IndexedEndpointType::INDEX_ATTRIB_NAME[] = UNICODE_LITERAL_5(i,n,d,e,x); const XMLCh IndexedEndpointType::ISDEFAULT_ATTRIB_NAME[] = UNICODE_LITERAL_9(i,s,D,e,f,a,u,l,t); +const XMLCh InformationURL::LOCAL_NAME[] = UNICODE_LITERAL_14(I,n,f,o,r,m,a,t,i,o,n,U,R,L); +const XMLCh IPHint::LOCAL_NAME[] = UNICODE_LITERAL_6(I,P,H,i,n,t); const XMLCh KeyDescriptor::LOCAL_NAME[] = UNICODE_LITERAL_13(K,e,y,D,e,s,c,r,i,p,t,o,r); const XMLCh KeyDescriptor::TYPE_NAME[] = UNICODE_LITERAL_17(K,e,y,D,e,s,c,r,i,p,t,o,r,T,y,p,e); const XMLCh KeyDescriptor::USE_ATTRIB_NAME[] = UNICODE_LITERAL_3(u,s,e); const XMLCh KeyDescriptor::KEYTYPE_ENCRYPTION[] = UNICODE_LITERAL_10(e,n,c,r,y,p,t,i,o,n); const XMLCh KeyDescriptor::KEYTYPE_SIGNING[] = UNICODE_LITERAL_7(s,i,g,n,i,n,g); +const XMLCh Logo::LOCAL_NAME[] = UNICODE_LITERAL_4(L,o,g,o); +const XMLCh Logo::TYPE_NAME[] = UNICODE_LITERAL_8(L,o,g,o,T,y,p,e); +const XMLCh Logo::LANG_ATTRIB_NAME[] = UNICODE_LITERAL_4(l,a,n,g); +const XMLCh Logo::HEIGHT_ATTRIB_NAME[] = UNICODE_LITERAL_6(h,e,i,g,h,t); +const XMLCh Logo::WIDTH_ATTRIB_NAME[] = UNICODE_LITERAL_5(w,i,d,t,h); const XMLCh localizedNameType::LOCAL_NAME[] = {chNull}; const XMLCh localizedNameType::TYPE_NAME[] = UNICODE_LITERAL_17(l,o,c,a,l,i,z,e,d,N,a,m,e,T,y,p,e); const XMLCh localizedNameType::LANG_ATTRIB_NAME[] = UNICODE_LITERAL_4(l,a,n,g); @@ -2585,18 +3214,25 @@ const XMLCh OrganizationDisplayName::LOCAL_NAME[] = UNICODE_LITERAL_23(O,r,g const XMLCh OrganizationURL::LOCAL_NAME[] = UNICODE_LITERAL_15(O,r,g,a,n,i,z,a,t,i,o,n,U,R,L); const XMLCh PDPDescriptor::LOCAL_NAME[] = UNICODE_LITERAL_13(P,D,P,D,e,s,c,r,i,p,t,o,r); const XMLCh PDPDescriptor::TYPE_NAME[] = UNICODE_LITERAL_17(P,D,P,D,e,s,c,r,i,p,t,o,r,T,y,p,e); +const XMLCh PrivacyStatementURL::LOCAL_NAME[] = UNICODE_LITERAL_19(P,r,i,v,a,c,y,S,t,a,t,e,m,e,n,t,U,R,L); const XMLCh QueryDescriptorType::LOCAL_NAME[] = {chNull}; const XMLCh QueryDescriptorType::TYPE_NAME[] = UNICODE_LITERAL_19(Q,u,e,r,y,D,e,s,c,r,i,p,t,o,r,T,y,p,e); const XMLCh QueryDescriptorType::WANTASSERTIONSSIGNED_ATTRIB_NAME[] = UNICODE_LITERAL_20(W,a,n,t,A,s,s,e,r,t,i,o,n,s,S,i,g,n,e,d); const XMLCh RequestedAttribute::LOCAL_NAME[] = UNICODE_LITERAL_18(R,e,q,u,e,s,t,e,d,A,t,t,r,i,b,u,t,e); const XMLCh RequestedAttribute::TYPE_NAME[] = UNICODE_LITERAL_22(R,e,q,u,e,s,t,e,d,A,t,t,r,i,b,u,t,e,T,y,p,e); const XMLCh RequestedAttribute::ISREQUIRED_ATTRIB_NAME[] = UNICODE_LITERAL_10(i,s,R,e,q,u,i,r,e,d); +const XMLCh RequestInitiator::LOCAL_NAME[] = UNICODE_LITERAL_16(R,e,q,u,e,s,t,I,n,i,t,i,a,t,o,r); const XMLCh RoleDescriptor::LOCAL_NAME[] = UNICODE_LITERAL_14(R,o,l,e,D,e,s,c,r,i,p,t,o,r); const XMLCh RoleDescriptor::ID_ATTRIB_NAME[] = UNICODE_LITERAL_2(I,D); const XMLCh RoleDescriptor::PROTOCOLSUPPORTENUMERATION_ATTRIB_NAME[] = UNICODE_LITERAL_26(p,r,o,t,o,c,o,l,S,u,p,p,o,r,t,E,n,u,m,e,r,a,t,i,o,n); const XMLCh RoleDescriptor::ERRORURL_ATTRIB_NAME[] = UNICODE_LITERAL_8(e,r,r,o,r,U,R,L); const XMLCh ServiceDescription::LOCAL_NAME[] = UNICODE_LITERAL_18(S,e,r,v,i,c,e,D,e,s,c,r,i,p,t,i,o,n); const XMLCh ServiceName::LOCAL_NAME[] = UNICODE_LITERAL_11(S,e,r,v,i,c,e,N,a,m,e); +const XMLCh SigningMethod::LOCAL_NAME[] = UNICODE_LITERAL_13(S,i,g,n,i,n,g,M,e,t,h,o,d); +const XMLCh SigningMethod::TYPE_NAME[] = UNICODE_LITERAL_17(S,i,g,n,i,n,g,M,e,t,h,o,d,T,y,p,e); +const XMLCh SigningMethod::ALGORITHM_ATTRIB_NAME[] = UNICODE_LITERAL_9(A,l,g,o,r,i,t,h,m); +const XMLCh SigningMethod::MINKEYSIZE_ATTRIB_NAME[] = UNICODE_LITERAL_10(M,i,n,K,e,y,S,i,z,e); +const XMLCh SigningMethod::MAXKEYSIZE_ATTRIB_NAME[] = UNICODE_LITERAL_10(M,a,x,K,e,y,S,i,z,e); const XMLCh SingleLogoutService::LOCAL_NAME[] = UNICODE_LITERAL_19(S,i,n,g,l,e,L,o,g,o,u,t,S,e,r,v,i,c,e); const XMLCh SingleSignOnService::LOCAL_NAME[] = UNICODE_LITERAL_19(S,i,n,g,l,e,S,i,g,n,O,n,S,e,r,v,i,c,e); const XMLCh SourceID::LOCAL_NAME[] = UNICODE_LITERAL_8(S,o,u,r,c,e,I,D); @@ -2609,3 +3245,5 @@ const XMLCh SSODescriptorType::TYPE_NAME[] = UNICODE_LITERAL_17(S,S,O const XMLCh SurName::LOCAL_NAME[] = UNICODE_LITERAL_7(S,u,r,N,a,m,e); const XMLCh TelephoneNumber::LOCAL_NAME[] = UNICODE_LITERAL_15(T,e,l,e,p,h,o,n,e,N,u,m,b,e,r); const XMLCh TimeBoundSAMLObject::VALIDUNTIL_ATTRIB_NAME[] = UNICODE_LITERAL_10(v,a,l,i,d,U,n,t,i,l); +const XMLCh UIInfo::LOCAL_NAME[] = UNICODE_LITERAL_6(U,I,I,n,f,o); +const XMLCh UIInfo::TYPE_NAME[] = UNICODE_LITERAL_10(U,I,I,n,f,o,T,y,p,e);