+ 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_EX(DiscoveryResponse);
+ };
+
+ 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_EX(RequestInitiator);
+ };
+
+ 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<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
+ if (*i) {
+ Attribute* a=dynamic_cast<Attribute*>(*i);
+ if (a) {
+ getAttributes().push_back(a->cloneAttribute());
+ continue;
+ }
+
+ saml2::Assertion* as=dynamic_cast<saml2::Assertion*>(*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), m_Algorithm(nullptr) {
+ setAlgorithm(src.getAlgorithm());
+ for (vector<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) {
+ if (*i) {
+ getUnknownXMLObjects().push_back((*i)->clone());
+ }
+ }
+ }
+
+ IMPL_XMLOBJECT_CLONE(DigestMethod);
+ IMPL_STRING_ATTRIB(Algorithm);
+ 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
+ {
+ void init() {
+ m_Algorithm = m_MinKeySize = m_MaxKeySize = nullptr;
+ }
+
+ 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) {
+ init();
+ }
+
+ SigningMethodImpl(const SigningMethodImpl& src)
+ : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
+ init();
+ setAlgorithm(src.getAlgorithm());
+ setMinKeySize(src.m_MinKeySize);
+ setMaxKeySize(src.m_MaxKeySize);
+ for (vector<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) {
+ if (*i) {
+ getUnknownXMLObjects().push_back((*i)->clone());
+ }
+ }
+ }
+
+ IMPL_XMLOBJECT_CLONE(SigningMethod);
+ IMPL_STRING_ATTRIB(Algorithm);
+ IMPL_INTEGER_ATTRIB(MinKeySize);
+ IMPL_INTEGER_ATTRIB(MaxKeySize);
+ IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end());
+
+ 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_EX(DisplayName);
+ };
+
+ 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_EX(Description);
+ };
+
+ 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_EX(InformationURL);
+ };
+
+ 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_EX(PrivacyStatementURL);
+ };
+
+ class SAML_DLLLOCAL KeywordsImpl : public virtual Keywords,
+ public AbstractSimpleElement,
+ public AbstractDOMCachingXMLObject,
+ public AbstractXMLObjectMarshaller,
+ public AbstractXMLObjectUnmarshaller
+ {
+ void init() {
+ m_Lang=nullptr;
+ m_LangPrefix=nullptr;
+ }
+
+ protected:
+ KeywordsImpl() {
+ init();
+ }
+
+ public:
+ virtual ~KeywordsImpl() {
+ XMLString::release(&m_Lang);
+ XMLString::release(&m_LangPrefix);
+ }
+
+ KeywordsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
+ init();
+ }
+
+ KeywordsImpl(const KeywordsImpl& 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(Keywords);
+ IMPL_XMLOBJECT_FOREIGN_ATTRIB(Lang,XMLCh);
+
+ 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);
+ else
+ attr->setPrefix(xmlconstants::XML_PREFIX);
+ attr->setNodeValue(m_Lang);
+ domElement->setAttributeNodeNS(attr);
+ }
+ }
+
+ 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;
+ }
+ AbstractXMLObjectUnmarshaller::processAttribute(attribute);
+ }
+ };
+
+ 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);
+ else
+ attr->setPrefix(xmlconstants::XML_PREFIX);
+ 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<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
+ if (*i) {
+ DisplayName* dn=dynamic_cast<DisplayName*>(*i);
+ if (dn) {
+ getDisplayNames().push_back(dn->cloneDisplayName());
+ continue;
+ }
+
+ Description* des=dynamic_cast<Description*>(*i);
+ if (des) {
+ getDescriptions().push_back(des->cloneDescription());
+ continue;
+ }
+
+ Keywords* key=dynamic_cast<Keywords*>(*i);
+ if (key) {
+ getKeywordss().push_back(key->cloneKeywords());
+ continue;
+ }
+
+ Logo* logo=dynamic_cast<Logo*>(*i);
+ if (logo) {
+ getLogos().push_back(logo->cloneLogo());
+ continue;
+ }
+
+ InformationURL* inf=dynamic_cast<InformationURL*>(*i);
+ if (inf) {
+ getInformationURLs().push_back(inf->cloneInformationURL());
+ continue;
+ }
+
+ PrivacyStatementURL* priv=dynamic_cast<PrivacyStatementURL*>(*i);
+ if (priv) {
+ getPrivacyStatementURLs().push_back(priv->clonePrivacyStatementURL());
+ continue;
+ }
+
+ if (*i) {
+ 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(Keywords,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(Keywords,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<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
+ if (*i) {
+ IPHint* ip=dynamic_cast<IPHint*>(*i);
+ if (ip) {
+ getIPHints().push_back(ip->cloneIPHint());
+ continue;
+ }
+
+ DomainHint* dom=dynamic_cast<DomainHint*>(*i);
+ if (dom) {
+ getDomainHints().push_back(dom->cloneDomainHint());
+ continue;
+ }
+
+ GeolocationHint* geo=dynamic_cast<GeolocationHint*>(*i);
+ if (geo) {
+ getGeolocationHints().push_back(geo->cloneGeolocationHint());
+ continue;
+ }
+
+ if (*i) {
+ 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);