X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml1%2Fcore%2Fimpl%2FAssertionsImpl.cpp;h=2e9d55f40c9cf9373151a09c634fc162e0f51930;hb=c94a8ec50180f280a81259fa13a23eb3a45e087f;hp=69df6de436f88ebccf34f76ed3298dc3da0ec70b;hpb=9ed63e5f63e98b3697c439fb5d1e664d00db751f;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml1/core/impl/AssertionsImpl.cpp b/saml/saml1/core/impl/AssertionsImpl.cpp index 69df6de..2e9d55f 100644 --- a/saml/saml1/core/impl/AssertionsImpl.cpp +++ b/saml/saml1/core/impl/AssertionsImpl.cpp @@ -1,36 +1,42 @@ -/* - * Copyright 2001-2006 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 +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. + * + * UCAID licenses this file to you 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 * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. */ /** * AssertionsImpl.cpp - * - * Implementation classes for SAML 1.x Assertions schema + * + * Implementation classes for SAML 1.x Assertions schema. */ #include "internal.h" #include "exceptions.h" #include "saml1/core/Assertions.h" +#include "signature/ContentReference.h" -#include #include -#include #include #include #include #include +#include +#include +#include #include #include @@ -38,10 +44,12 @@ #include using namespace opensaml::saml1; -using namespace opensaml; using namespace xmlsignature; using namespace xmltooling; using namespace std; +using xmlconstants::XMLSIG_NS; +using xmlconstants::XML_ONE; +using samlconstants::SAML1_NS; #if defined (_MSC_VER) #pragma warning( push ) @@ -50,11 +58,25 @@ using namespace std; namespace opensaml { namespace saml1 { - + DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,AssertionIDReference); DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,Audience); DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,ConfirmationMethod); - + + class SAML_DLLLOCAL ConditionImpl : public virtual Condition, public AnyElementImpl + { + public: + virtual ~ConditionImpl() {} + + ConditionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + } + + ConditionImpl(const ConditionImpl& src) : AbstractXMLObject(src), AnyElementImpl(src) {} + + IMPL_XMLOBJECT_CLONE_EX(Condition); + }; + class SAML_DLLLOCAL AudienceRestrictionConditionImpl : public virtual AudienceRestrictionCondition, public AbstractComplexElement, public AbstractDOMCachingXMLObject, @@ -63,13 +85,13 @@ namespace opensaml { { public: virtual ~AudienceRestrictionConditionImpl() {} - - AudienceRestrictionConditionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AudienceRestrictionConditionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - + AudienceRestrictionConditionImpl(const AudienceRestrictionConditionImpl& src) - : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { VectorOf(Audience) v=getAudiences(); for (vector::const_iterator i=src.m_Audiences.begin(); i!=src.m_Audiences.end(); i++) { if (*i) { @@ -77,40 +99,35 @@ namespace opensaml { } } } - - IMPL_XMLOBJECT_CLONE(AudienceRestrictionCondition); - Condition* cloneCondition() const { - return cloneAudienceRestrictionCondition(); - } + + IMPL_XMLOBJECT_CLONE2(AudienceRestrictionCondition,Condition); IMPL_TYPED_CHILDREN(Audience,m_children.end()); - + protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(Audience,SAMLConstants::SAML1_NS,false); + PROC_TYPED_CHILDREN(Audience,SAML1_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; class SAML_DLLLOCAL DoNotCacheConditionImpl : public virtual DoNotCacheCondition, - public AbstractChildlessElement, + public AbstractSimpleElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { public: virtual ~DoNotCacheConditionImpl() {} - - DoNotCacheConditionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + DoNotCacheConditionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - - DoNotCacheConditionImpl(const DoNotCacheConditionImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { - } - - IMPL_XMLOBJECT_CLONE(DoNotCacheCondition); - Condition* cloneCondition() const { - return cloneDoNotCacheCondition(); + + DoNotCacheConditionImpl(const DoNotCacheConditionImpl& src) + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { } + + IMPL_XMLOBJECT_CLONE2(DoNotCacheCondition,Condition); }; class SAML_DLLLOCAL ConditionsImpl : public virtual Conditions, @@ -119,18 +136,23 @@ namespace opensaml { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_NotBefore=m_NotOnOrAfter=nullptr; + } + public: virtual ~ConditionsImpl() { delete m_NotBefore; delete m_NotOnOrAfter; } - - ConditionsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + ConditionsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - - ConditionsImpl(const ConditionsImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + + ConditionsImpl(const ConditionsImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setNotBefore(src.getNotBefore()); setNotOnOrAfter(src.getNotOnOrAfter()); @@ -142,13 +164,13 @@ namespace opensaml { getAudienceRestrictionConditions().push_back(arc->cloneAudienceRestrictionCondition()); continue; } - + DoNotCacheCondition* dncc=dynamic_cast(*i); if (dncc) { getDoNotCacheConditions().push_back(dncc->cloneDoNotCacheCondition()); continue; } - + Condition* c=dynamic_cast(*i); if (c) { getConditions().push_back(c->cloneCondition()); @@ -157,80 +179,74 @@ namespace opensaml { } } } - - void init() { - m_NotBefore=m_NotOnOrAfter=NULL; - } - + IMPL_XMLOBJECT_CLONE(Conditions); IMPL_DATETIME_ATTRIB(NotBefore,0); IMPL_DATETIME_ATTRIB(NotOnOrAfter,SAMLTIME_MAX); IMPL_TYPED_CHILDREN(AudienceRestrictionCondition, m_children.end()); IMPL_TYPED_CHILDREN(DoNotCacheCondition,m_children.end()); IMPL_TYPED_CHILDREN(Condition,m_children.end()); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_DATETIME_ATTRIB(NotBefore,NOTBEFORE,NULL); - MARSHALL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); + MARSHALL_DATETIME_ATTRIB(NotBefore,NOTBEFORE,nullptr); + MARSHALL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,nullptr); } - + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AudienceRestrictionCondition,SAMLConstants::SAML1_NS,true); - PROC_TYPED_CHILDREN(DoNotCacheCondition,SAMLConstants::SAML1_NS,true); - PROC_TYPED_CHILDREN(Condition,SAMLConstants::SAML1_NS,true); + PROC_TYPED_CHILDREN(AudienceRestrictionCondition,SAML1_NS,true); + PROC_TYPED_CHILDREN(DoNotCacheCondition,SAML1_NS,true); + PROC_TYPED_CHILDREN(Condition,SAML1_NS,true); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } - + void processAttribute(const DOMAttr* attribute) { - PROC_DATETIME_ATTRIB(NotBefore,NOTBEFORE,NULL); - PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); + PROC_DATETIME_ATTRIB(NotBefore,NOTBEFORE,nullptr); + PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,nullptr); } }; class SAML_DLLLOCAL NameIdentifierImpl : public virtual NameIdentifier, public AbstractSimpleElement, - public AbstractChildlessElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_Format=m_NameQualifier=nullptr; + } + public: virtual ~NameIdentifierImpl() { XMLString::release(&m_Format); XMLString::release(&m_NameQualifier); } - - NameIdentifierImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + NameIdentifierImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + NameIdentifierImpl(const NameIdentifierImpl& src) : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); setFormat(src.getFormat()); setNameQualifier(src.getNameQualifier()); } - - void init() { - m_Format=m_NameQualifier=NULL; - } - + IMPL_XMLOBJECT_CLONE(NameIdentifier); IMPL_STRING_ATTRIB(Format); IMPL_STRING_ATTRIB(NameQualifier); - IMPL_XMLOBJECT_CONTENT; - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Format,FORMAT,NULL); - MARSHALL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER,NULL); + MARSHALL_STRING_ATTRIB(Format,FORMAT,nullptr); + MARSHALL_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER,nullptr); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Format,FORMAT,NULL); - PROC_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER,NULL); + PROC_STRING_ATTRIB(Format,FORMAT,nullptr); + PROC_STRING_ATTRIB(NameQualifier,NAMEQUALIFIER,nullptr); } }; @@ -238,16 +254,15 @@ namespace opensaml { { public: virtual ~SubjectConfirmationDataImpl() {} - - SubjectConfirmationDataImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + SubjectConfirmationDataImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - - SubjectConfirmationDataImpl(const SubjectConfirmationDataImpl& src) - : AnyElementImpl(src) { + + SubjectConfirmationDataImpl(const SubjectConfirmationDataImpl& src) : AbstractXMLObject(src), AnyElementImpl(src) { } - - IMPL_XMLOBJECT_CLONE(SubjectConfirmationData); + + IMPL_XMLOBJECT_CLONE_EX(SubjectConfirmationData); }; class SAML_DLLLOCAL SubjectConfirmationImpl : public virtual SubjectConfirmation, @@ -256,48 +271,48 @@ namespace opensaml { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_SubjectConfirmationData=nullptr; + m_KeyInfo=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_pos_SubjectConfirmationData=m_children.begin(); + m_pos_KeyInfo=m_pos_SubjectConfirmationData; + ++m_pos_KeyInfo; + } + public: virtual ~SubjectConfirmationImpl() {} - - SubjectConfirmationImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + SubjectConfirmationImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - - SubjectConfirmationImpl(const SubjectConfirmationImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + + SubjectConfirmationImpl(const SubjectConfirmationImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); if (src.getSubjectConfirmationData()) setSubjectConfirmationData(src.getSubjectConfirmationData()->clone()); if (src.getKeyInfo()) setKeyInfo(src.getKeyInfo()->cloneKeyInfo()); - VectorOf(ConfirmationMethod) v=getConfirmationMethods(); for (vector::const_iterator i=src.m_ConfirmationMethods.begin(); i!=src.m_ConfirmationMethods.end(); i++) { if (*i) { - v.push_back((*i)->cloneConfirmationMethod()); + getConfirmationMethods().push_back((*i)->cloneConfirmationMethod()); } } } - - void init() { - m_SubjectConfirmationData=NULL; - m_KeyInfo=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_pos_SubjectConfirmationData=m_children.begin(); - m_pos_KeyInfo=m_pos_SubjectConfirmationData; - ++m_pos_KeyInfo; - } IMPL_XMLOBJECT_CLONE(SubjectConfirmation); IMPL_TYPED_CHILDREN(ConfirmationMethod,m_pos_SubjectConfirmationData); IMPL_XMLOBJECT_CHILD(SubjectConfirmationData); IMPL_TYPED_CHILD(KeyInfo); - + protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(ConfirmationMethod,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILD(KeyInfo,XMLConstants::XMLSIG_NS,false); - + PROC_TYPED_CHILDREN(ConfirmationMethod,SAML1_NS,false); + PROC_TYPED_CHILD(KeyInfo,XMLSIG_NS,false); + // Anything else we'll assume is the data. if (getSubjectConfirmationData()) throw UnmarshallingException("Invalid child element: $1",params(1,childXMLObject->getElementQName().toString().c_str())); @@ -311,44 +326,59 @@ namespace opensaml { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_NameIdentifier=nullptr; + m_SubjectConfirmation=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_pos_NameIdentifier=m_children.begin(); + m_pos_SubjectConfirmation=m_pos_NameIdentifier; + ++m_pos_SubjectConfirmation; + } + public: virtual ~SubjectImpl() {} - - SubjectImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + SubjectImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - - SubjectImpl(const SubjectImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + + SubjectImpl(const SubjectImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); if (src.getNameIdentifier()) setNameIdentifier(src.getNameIdentifier()->cloneNameIdentifier()); if (src.getSubjectConfirmation()) setSubjectConfirmation(src.getSubjectConfirmation()->cloneSubjectConfirmation()); } - - void init() { - m_NameIdentifier=NULL; - m_SubjectConfirmation=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_pos_NameIdentifier=m_children.begin(); - m_pos_SubjectConfirmation=m_pos_NameIdentifier; - ++m_pos_SubjectConfirmation; - } IMPL_XMLOBJECT_CLONE(Subject); IMPL_TYPED_CHILD(NameIdentifier); IMPL_TYPED_CHILD(SubjectConfirmation); - + protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(NameIdentifier,SAMLConstants::SAML1_NS,true); - PROC_TYPED_CHILD(SubjectConfirmation,SAMLConstants::SAML1_NS,true); + PROC_TYPED_CHILD(NameIdentifier,SAML1_NS,true); + PROC_TYPED_CHILD(SubjectConfirmation,SAML1_NS,true); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; + class SAML_DLLLOCAL StatementImpl : public virtual Statement, public AnyElementImpl + { + public: + virtual ~StatementImpl() {} + + StatementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + } + + StatementImpl(const StatementImpl& src) : AbstractXMLObject(src), AnyElementImpl(src) {} + + IMPL_XMLOBJECT_CLONE_EX(Statement); + }; + class SAML_DLLLOCAL SubjectStatementImpl : public virtual SubjectStatement, public AbstractComplexElement, public AbstractDOMCachingXMLObject, @@ -356,200 +386,211 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Subject=NULL; - m_children.push_back(NULL); + m_Subject=nullptr; + m_children.push_back(nullptr); m_pos_Subject=m_children.begin(); } + protected: SubjectStatementImpl() { init(); } public: virtual ~SubjectStatementImpl() {} - - SubjectStatementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + SubjectStatementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - - SubjectStatementImpl(const SubjectStatementImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + + SubjectStatementImpl(const SubjectStatementImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); + } + + void _clone(const SubjectStatementImpl& src) { if (src.getSubject()) setSubject(src.getSubject()->cloneSubject()); } - + + Statement* cloneStatement() const { + return dynamic_cast(clone()); + } + + SubjectStatement* cloneSubjectStatement() const { + return dynamic_cast(clone()); + } + IMPL_TYPED_CHILD(Subject); - + protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(Subject,SAMLConstants::SAML1_NS,true); + PROC_TYPED_CHILD(Subject,SAML1_NS,true); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; class SAML_DLLLOCAL SubjectLocalityImpl : public virtual SubjectLocality, - public AbstractChildlessElement, + public AbstractSimpleElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_IPAddress=m_DNSAddress=nullptr; + } + public: virtual ~SubjectLocalityImpl() { XMLString::release(&m_IPAddress); XMLString::release(&m_DNSAddress); } - - SubjectLocalityImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + SubjectLocalityImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - - SubjectLocalityImpl(const SubjectLocalityImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + + SubjectLocalityImpl(const SubjectLocalityImpl& src) + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); setIPAddress(src.getIPAddress()); setDNSAddress(src.getDNSAddress()); } - - void init() { - m_IPAddress=m_DNSAddress=NULL; - } - + IMPL_XMLOBJECT_CLONE(SubjectLocality); IMPL_STRING_ATTRIB(IPAddress); IMPL_STRING_ATTRIB(DNSAddress); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(IPAddress,IPADDRESS,NULL); - MARSHALL_STRING_ATTRIB(DNSAddress,DNSADDRESS,NULL); + MARSHALL_STRING_ATTRIB(IPAddress,IPADDRESS,nullptr); + MARSHALL_STRING_ATTRIB(DNSAddress,DNSADDRESS,nullptr); } - + void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(IPAddress,IPADDRESS,NULL); - PROC_STRING_ATTRIB(DNSAddress,DNSADDRESS,NULL); + PROC_STRING_ATTRIB(IPAddress,IPADDRESS,nullptr); + PROC_STRING_ATTRIB(DNSAddress,DNSADDRESS,nullptr); } }; class SAML_DLLLOCAL AuthorityBindingImpl : public virtual AuthorityBinding, - public AbstractChildlessElement, + public AbstractSimpleElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_AuthorityKind=nullptr; + m_Location=m_Binding=nullptr; + } + public: virtual ~AuthorityBindingImpl() { delete m_AuthorityKind; XMLString::release(&m_Location); XMLString::release(&m_Binding); } - - AuthorityBindingImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AuthorityBindingImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - - AuthorityBindingImpl(const AuthorityBindingImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + + AuthorityBindingImpl(const AuthorityBindingImpl& src) + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); setAuthorityKind(src.getAuthorityKind()); setLocation(src.getLocation()); setBinding(src.getBinding()); } - - void init() { - m_AuthorityKind=NULL; - m_Location=m_Binding=NULL; - } - + IMPL_XMLOBJECT_CLONE(AuthorityBinding); - IMPL_XMLOBJECT_ATTRIB(AuthorityKind,QName); + IMPL_XMLOBJECT_ATTRIB(AuthorityKind,xmltooling::QName); IMPL_STRING_ATTRIB(Location); IMPL_STRING_ATTRIB(Binding); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_QNAME_ATTRIB(AuthorityKind,AUTHORITYKIND,NULL); - MARSHALL_STRING_ATTRIB(Location,LOCATION,NULL); - MARSHALL_STRING_ATTRIB(Binding,BINDING,NULL); + MARSHALL_QNAME_ATTRIB(AuthorityKind,AUTHORITYKIND,nullptr); + MARSHALL_STRING_ATTRIB(Location,LOCATION,nullptr); + MARSHALL_STRING_ATTRIB(Binding,BINDING,nullptr); } - + void processAttribute(const DOMAttr* attribute) { - PROC_QNAME_ATTRIB(AuthorityKind,AUTHORITYKIND,NULL); - PROC_STRING_ATTRIB(Location,LOCATION,NULL); - PROC_STRING_ATTRIB(Binding,BINDING,NULL); + PROC_QNAME_ATTRIB(AuthorityKind,AUTHORITYKIND,nullptr); + PROC_STRING_ATTRIB(Location,LOCATION,nullptr); + PROC_STRING_ATTRIB(Binding,BINDING,nullptr); } }; class SAML_DLLLOCAL AuthenticationStatementImpl : public virtual AuthenticationStatement, public SubjectStatementImpl { + void init() { + m_AuthenticationMethod=nullptr; + m_AuthenticationInstant=nullptr; + m_SubjectLocality=nullptr; + m_children.push_back(nullptr); + m_pos_SubjectLocality=m_pos_Subject; + ++m_pos_SubjectLocality; + } + public: virtual ~AuthenticationStatementImpl() { XMLString::release(&m_AuthenticationMethod); delete m_AuthenticationInstant; } - - AuthenticationStatementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AuthenticationStatementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + AuthenticationStatementImpl(const AuthenticationStatementImpl& src) : AbstractXMLObject(src), SubjectStatementImpl(src) { init(); + } + + void _clone(const AuthenticationStatementImpl& src) { + SubjectStatementImpl::_clone(src); setAuthenticationMethod(src.getAuthenticationMethod()); setAuthenticationInstant(src.getAuthenticationInstant()); if (src.getSubjectLocality()) setSubjectLocality(src.getSubjectLocality()->cloneSubjectLocality()); - VectorOf(AuthorityBinding) v=getAuthorityBindings(); for (vector::const_iterator i=src.m_AuthorityBindings.begin(); i!=src.m_AuthorityBindings.end(); i++) { if (*i) { - v.push_back((*i)->cloneAuthorityBinding()); + getAuthorityBindings().push_back((*i)->cloneAuthorityBinding()); } } } - - void init() { - m_AuthenticationMethod=NULL; - m_AuthenticationInstant=NULL; - m_SubjectLocality=NULL; - m_children.push_back(NULL); - m_pos_SubjectLocality=m_pos_Subject; - ++m_pos_SubjectLocality; - } - - IMPL_XMLOBJECT_CLONE(AuthenticationStatement); - SubjectStatement* cloneSubjectStatement() const { - return cloneAuthenticationStatement(); - } - Statement* cloneStatement() const { - return cloneAuthenticationStatement(); - } + + IMPL_XMLOBJECT_CLONE_EX(AuthenticationStatement); IMPL_STRING_ATTRIB(AuthenticationMethod); IMPL_DATETIME_ATTRIB(AuthenticationInstant,0); IMPL_TYPED_CHILD(SubjectLocality); IMPL_TYPED_CHILDREN(AuthorityBinding, m_children.end()); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(AuthenticationMethod,AUTHENTICATIONMETHOD,NULL); - MARSHALL_DATETIME_ATTRIB(AuthenticationInstant,AUTHENTICATIONINSTANT,NULL); + MARSHALL_STRING_ATTRIB(AuthenticationMethod,AUTHENTICATIONMETHOD,nullptr); + MARSHALL_DATETIME_ATTRIB(AuthenticationInstant,AUTHENTICATIONINSTANT,nullptr); SubjectStatementImpl::marshallAttributes(domElement); } - + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(SubjectLocality,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILDREN(AuthorityBinding,SAMLConstants::SAML1_NS,false); + PROC_TYPED_CHILD(SubjectLocality,SAML1_NS,false); + PROC_TYPED_CHILDREN(AuthorityBinding,SAML1_NS,false); SubjectStatementImpl::processChildElement(childXMLObject,root); } - + void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(AuthenticationMethod,AUTHENTICATIONMETHOD,NULL); - PROC_DATETIME_ATTRIB(AuthenticationInstant,AUTHENTICATIONINSTANT,NULL); + PROC_STRING_ATTRIB(AuthenticationMethod,AUTHENTICATIONMETHOD,nullptr); + PROC_DATETIME_ATTRIB(AuthenticationInstant,AUTHENTICATIONINSTANT,nullptr); SubjectStatementImpl::processAttribute(attribute); } }; class SAML_DLLLOCAL ActionImpl : public virtual Action, public AbstractSimpleElement, - public AbstractChildlessElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller @@ -558,26 +599,26 @@ namespace opensaml { virtual ~ActionImpl() { XMLString::release(&m_Namespace); } - - ActionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Namespace(NULL) { + + ActionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Namespace(nullptr) { } - - ActionImpl(const ActionImpl& src) : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { + + ActionImpl(const ActionImpl& src) + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src), m_Namespace(nullptr) { setNamespace(src.getNamespace()); } - + IMPL_XMLOBJECT_CLONE(Action); IMPL_STRING_ATTRIB(Namespace); - IMPL_XMLOBJECT_CONTENT; - + 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); } }; @@ -589,13 +630,13 @@ namespace opensaml { { public: virtual ~EvidenceImpl() {} - - EvidenceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + EvidenceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - - EvidenceImpl(const EvidenceImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { - + + EvidenceImpl(const EvidenceImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { if (*i) { AssertionIDReference* ref=dynamic_cast(*i); @@ -603,7 +644,7 @@ namespace opensaml { getAssertionIDReferences().push_back(ref->cloneAssertionIDReference()); continue; } - + Assertion* assertion=dynamic_cast(*i); if (assertion) { getAssertions().push_back(assertion->cloneAssertion()); @@ -612,15 +653,15 @@ namespace opensaml { } } } - + IMPL_XMLOBJECT_CLONE(Evidence); IMPL_TYPED_CHILDREN(AssertionIDReference,m_children.end()); IMPL_TYPED_CHILDREN(Assertion,m_children.end()); - + protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AssertionIDReference,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILDREN(Assertion,SAMLConstants::SAML1_NS,true); + PROC_TYPED_CHILDREN(AssertionIDReference,SAML1_NS,false); + PROC_TYPED_CHILDREN(Assertion,SAML1_NS,true); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; @@ -628,113 +669,111 @@ namespace opensaml { class SAML_DLLLOCAL AuthorizationDecisionStatementImpl : public virtual AuthorizationDecisionStatement, public SubjectStatementImpl { + void init() { + m_Resource=nullptr; + m_Decision=nullptr; + m_Evidence=nullptr; + m_children.push_back(nullptr); + m_pos_Evidence=m_pos_Subject; + ++m_pos_Evidence; + } + public: virtual ~AuthorizationDecisionStatementImpl() { XMLString::release(&m_Resource); XMLString::release(&m_Decision); } - - AuthorizationDecisionStatementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AuthorizationDecisionStatementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - + AuthorizationDecisionStatementImpl(const AuthorizationDecisionStatementImpl& src) : AbstractXMLObject(src), SubjectStatementImpl(src) { init(); + } + + void _clone(const AuthorizationDecisionStatementImpl& src) { + SubjectStatementImpl::_clone(src); setResource(src.getResource()); setDecision(src.getDecision()); if (src.getEvidence()) setEvidence(src.getEvidence()->cloneEvidence()); - VectorOf(Action) v=getActions(); for (vector::const_iterator i=src.m_Actions.begin(); i!=src.m_Actions.end(); i++) { if (*i) { - v.push_back((*i)->cloneAction()); + getActions().push_back((*i)->cloneAction()); } } } - - void init() { - m_Resource=NULL; - m_Decision=NULL; - m_Evidence=NULL; - m_children.push_back(NULL); - m_pos_Evidence=m_pos_Subject; - ++m_pos_Evidence; - } - - IMPL_XMLOBJECT_CLONE(AuthorizationDecisionStatement); - SubjectStatement* cloneSubjectStatement() const { - return cloneAuthorizationDecisionStatement(); - } - Statement* cloneStatement() const { - return cloneAuthorizationDecisionStatement(); - } + + IMPL_XMLOBJECT_CLONE_EX(AuthorizationDecisionStatement); IMPL_STRING_ATTRIB(Resource); IMPL_STRING_ATTRIB(Decision); IMPL_TYPED_CHILD(Evidence); IMPL_TYPED_CHILDREN(Action, m_pos_Evidence); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Resource,RESOURCE,NULL); - MARSHALL_STRING_ATTRIB(Decision,DECISION,NULL); + MARSHALL_STRING_ATTRIB(Resource,RESOURCE,nullptr); + MARSHALL_STRING_ATTRIB(Decision,DECISION,nullptr); SubjectStatementImpl::marshallAttributes(domElement); } - + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(Evidence,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILDREN(Action,SAMLConstants::SAML1_NS,false); + PROC_TYPED_CHILD(Evidence,SAML1_NS,false); + PROC_TYPED_CHILDREN(Action,SAML1_NS,false); SubjectStatementImpl::processChildElement(childXMLObject,root); } - + void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Resource,RESOURCE,NULL); - PROC_STRING_ATTRIB(Decision,DECISION,NULL); + PROC_STRING_ATTRIB(Resource,RESOURCE,nullptr); + PROC_STRING_ATTRIB(Decision,DECISION,nullptr); SubjectStatementImpl::processAttribute(attribute); } }; class SAML_DLLLOCAL AttributeDesignatorImpl : public virtual AttributeDesignator, - public AbstractChildlessElement, + public AbstractSimpleElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_AttributeName=m_AttributeNamespace=nullptr; + } + public: virtual ~AttributeDesignatorImpl() { XMLString::release(&m_AttributeName); XMLString::release(&m_AttributeNamespace); } - - AttributeDesignatorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AttributeDesignatorImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - - AttributeDesignatorImpl(const AttributeDesignatorImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + + AttributeDesignatorImpl(const AttributeDesignatorImpl& src) + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { init(); setAttributeName(src.getAttributeName()); setAttributeNamespace(src.getAttributeNamespace()); } - - void init() { - m_AttributeName=m_AttributeNamespace=NULL; - } - + IMPL_XMLOBJECT_CLONE(AttributeDesignator); IMPL_STRING_ATTRIB(AttributeName); IMPL_STRING_ATTRIB(AttributeNamespace); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(AttributeName,ATTRIBUTENAME,NULL); - MARSHALL_STRING_ATTRIB(AttributeNamespace,ATTRIBUTENAMESPACE,NULL); + MARSHALL_STRING_ATTRIB(AttributeName,ATTRIBUTENAME,nullptr); + MARSHALL_STRING_ATTRIB(AttributeNamespace,ATTRIBUTENAMESPACE,nullptr); } - + void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(AttributeName,ATTRIBUTENAME,NULL); - PROC_STRING_ATTRIB(AttributeNamespace,ATTRIBUTENAMESPACE,NULL); + PROC_STRING_ATTRIB(AttributeName,ATTRIBUTENAME,nullptr); + PROC_STRING_ATTRIB(AttributeNamespace,ATTRIBUTENAMESPACE,nullptr); } }; @@ -744,45 +783,41 @@ namespace opensaml { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_AttributeName=m_AttributeNamespace=nullptr; + } public: virtual ~AttributeImpl() { XMLString::release(&m_AttributeName); XMLString::release(&m_AttributeNamespace); } - - AttributeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AttributeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - - AttributeImpl(const AttributeImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + + AttributeImpl(const AttributeImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setAttributeName(src.getAttributeName()); setAttributeNamespace(src.getAttributeNamespace()); - VectorOf(XMLObject) v=getAttributeValues(); for (vector::const_iterator i=src.m_AttributeValues.begin(); i!=src.m_AttributeValues.end(); i++) { if (*i) { - v.push_back((*i)->clone()); + getAttributeValues().push_back((*i)->clone()); } } } - - void init() { - m_AttributeName=m_AttributeNamespace=NULL; - } - - IMPL_XMLOBJECT_CLONE(Attribute); - AttributeDesignator* cloneAttributeDesignator() const { - return cloneAttribute(); - } + + IMPL_XMLOBJECT_CLONE2(Attribute,AttributeDesignator); IMPL_STRING_ATTRIB(AttributeName); IMPL_STRING_ATTRIB(AttributeNamespace); IMPL_XMLOBJECT_CHILDREN(AttributeValue,m_children.end()); - + protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(AttributeName,ATTRIBUTENAME,NULL); - MARSHALL_STRING_ATTRIB(AttributeNamespace,ATTRIBUTENAMESPACE,NULL); + MARSHALL_STRING_ATTRIB(AttributeName,ATTRIBUTENAME,nullptr); + MARSHALL_STRING_ATTRIB(AttributeNamespace,ATTRIBUTENAMESPACE,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -790,8 +825,8 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(AttributeName,ATTRIBUTENAME,NULL); - PROC_STRING_ATTRIB(AttributeNamespace,ATTRIBUTENAMESPACE,NULL); + PROC_STRING_ATTRIB(AttributeName,ATTRIBUTENAME,nullptr); + PROC_STRING_ATTRIB(AttributeNamespace,ATTRIBUTENAMESPACE,nullptr); } }; @@ -799,47 +834,43 @@ namespace opensaml { { public: virtual ~AttributeValueImpl() {} - - AttributeValueImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AttributeValueImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - - AttributeValueImpl(const AttributeValueImpl& src) : AnyElementImpl(src) {} - - IMPL_XMLOBJECT_CLONE(AttributeValue); + + AttributeValueImpl(const AttributeValueImpl& src) : AbstractXMLObject(src), AnyElementImpl(src) {} + + IMPL_XMLOBJECT_CLONE_EX(AttributeValue); }; class SAML_DLLLOCAL AttributeStatementImpl : public virtual AttributeStatement, public SubjectStatementImpl { public: virtual ~AttributeStatementImpl() {} - - AttributeStatementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AttributeStatementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - - AttributeStatementImpl(const AttributeStatementImpl& src) - : AbstractXMLObject(src), SubjectStatementImpl(src) { - VectorOf(Attribute) v=getAttributes(); + + AttributeStatementImpl(const AttributeStatementImpl& src) : AbstractXMLObject(src), SubjectStatementImpl(src) { + } + + void _clone(const AttributeStatementImpl& src) { + SubjectStatementImpl::_clone(src); for (vector::const_iterator i=src.m_Attributes.begin(); i!=src.m_Attributes.end(); i++) { if (*i) { - v.push_back((*i)->cloneAttribute()); + getAttributes().push_back((*i)->cloneAttribute()); } } } - - IMPL_XMLOBJECT_CLONE(AttributeStatement); - SubjectStatement* cloneSubjectStatement() const { - return cloneAttributeStatement(); - } - Statement* cloneStatement() const { - return cloneAttributeStatement(); - } + + IMPL_XMLOBJECT_CLONE_EX(AttributeStatement); IMPL_TYPED_CHILDREN(Attribute, m_children.end()); - + protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(Attribute,SAMLConstants::SAML1_NS,true); + PROC_TYPED_CHILDREN(Attribute,SAML1_NS,true); SubjectStatementImpl::processChildElement(childXMLObject,root); } }; @@ -852,13 +883,13 @@ namespace opensaml { { public: virtual ~AdviceImpl() {} - - AdviceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AdviceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } - - AdviceImpl(const AdviceImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { - + + AdviceImpl(const AdviceImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { if (*i) { AssertionIDReference* ref=dynamic_cast(*i); @@ -866,35 +897,37 @@ namespace opensaml { getAssertionIDReferences().push_back(ref->cloneAssertionIDReference()); continue; } - + Assertion* assertion=dynamic_cast(*i); if (assertion) { getAssertions().push_back(assertion->cloneAssertion()); continue; } - - getOthers().push_back((*i)->clone()); + + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } } } } - + IMPL_XMLOBJECT_CLONE(Advice); IMPL_TYPED_CHILDREN(AssertionIDReference,m_children.end()); IMPL_TYPED_CHILDREN(Assertion,m_children.end()); - IMPL_XMLOBJECT_CHILDREN(Other,m_children.end()); - + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); + protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILDREN(AssertionIDReference,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILDREN(Assertion,SAMLConstants::SAML1_NS,true); - + PROC_TYPED_CHILDREN(AssertionIDReference,SAML1_NS,false); + PROC_TYPED_CHILDREN(Assertion,SAML1_NS,true); + // Unknown child. const XMLCh* nsURI=root->getNamespaceURI(); - if (!XMLString::equals(nsURI,SAMLConstants::SAML1_NS) && nsURI && *nsURI) { - getOthers().push_back(childXMLObject); + if (!XMLString::equals(nsURI,SAML1_NS) && nsURI && *nsURI) { + getUnknownXMLObjects().push_back(childXMLObject); return; } - + AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } }; @@ -906,22 +939,23 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_MinorVersion=NULL; - m_AssertionID=NULL; - m_Issuer=NULL; - m_IssueInstant=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_Conditions=NULL; - m_Advice=NULL; - m_Signature=NULL; + m_MinorVersion=nullptr; + m_AssertionID=nullptr; + m_Issuer=nullptr; + m_IssueInstant=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_Conditions=nullptr; + m_Advice=nullptr; + m_Signature=nullptr; m_pos_Conditions=m_children.begin(); m_pos_Advice=m_pos_Conditions; ++m_pos_Advice; m_pos_Signature=m_pos_Advice; ++m_pos_Signature; } + public: virtual ~AssertionImpl() { XMLString::release(&m_MinorVersion); @@ -929,13 +963,14 @@ namespace opensaml { XMLString::release(&m_Issuer); delete m_IssueInstant; } - - AssertionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + + AssertionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - - AssertionImpl(const AssertionImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src) { + + AssertionImpl(const AssertionImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setMinorVersion(src.m_MinorVersion); setAssertionID(src.getAssertionID()); @@ -966,13 +1001,13 @@ namespace opensaml { getAuthorizationDecisionStatements().push_back(authzst->cloneAuthorizationDecisionStatement()); continue; } - + SubjectStatement* subst=dynamic_cast(*i); if (subst) { getSubjectStatements().push_back(subst->cloneSubjectStatement()); continue; } - + Statement* st=dynamic_cast(*i); if (st) { getStatements().push_back(st->cloneStatement()); @@ -981,7 +1016,7 @@ namespace opensaml { } } } - + //IMPL_TYPED_CHILD(Signature); // Need customized setter. protected: @@ -991,7 +1026,7 @@ namespace opensaml { Signature* getSignature() const { return m_Signature; } - + void setSignature(Signature* sig) { prepareForAssignment(m_Signature,sig); *m_pos_Signature=m_Signature=sig; @@ -999,13 +1034,21 @@ namespace opensaml { if (m_Signature) m_Signature->setContentReference(new opensaml::ContentReference(*this)); } - + IMPL_XMLOBJECT_CLONE(Assertion); IMPL_INTEGER_ATTRIB(MinorVersion); IMPL_STRING_ATTRIB(AssertionID); // have to special-case getXMLID const XMLCh* getXMLID() const { pair v = getMinorVersion(); - return (!v.first || v.second > 0) ? m_AssertionID : NULL; + return (!v.first || v.second > 0) ? m_AssertionID : nullptr; + } + const XMLCh* getID() const { + return getAssertionID(); + } + void releaseDOM() const { + if (getDOM()) + getDOM()->removeAttributeNS(nullptr, ASSERTIONID_ATTRIB_NAME); + AbstractDOMCachingXMLObject::releaseDOM(); } IMPL_STRING_ATTRIB(Issuer); IMPL_DATETIME_ATTRIB(IssueInstant,0); @@ -1016,50 +1059,74 @@ namespace opensaml { IMPL_TYPED_CHILDREN(AuthenticationStatement, m_pos_Signature); IMPL_TYPED_CHILDREN(AttributeStatement, m_pos_Signature); IMPL_TYPED_CHILDREN(AuthorizationDecisionStatement, m_pos_Signature); - + protected: + void prepareForMarshalling() const { + if (m_Signature) + declareNonVisibleNamespaces(); + } + void marshallAttributes(DOMElement* domElement) const { static const XMLCh MAJORVERSION[] = UNICODE_LITERAL_12(M,a,j,o,r,V,e,r,s,i,o,n); - domElement->setAttributeNS(NULL,MAJORVERSION,XMLConstants::XML_ONE); + domElement->setAttributeNS(nullptr,MAJORVERSION,XML_ONE); if (!m_MinorVersion) - const_cast(this)->m_MinorVersion=XMLString::replicate(XMLConstants::XML_ONE); - MARSHALL_INTEGER_ATTRIB(MinorVersion,MINORVERSION,NULL); + const_cast(this)->m_MinorVersion=XMLString::replicate(XML_ONE); + MARSHALL_INTEGER_ATTRIB(MinorVersion,MINORVERSION,nullptr); if (!m_AssertionID) const_cast(this)->m_AssertionID=SAMLConfig::getConfig().generateIdentifier(); - MARSHALL_ID_ATTRIB(AssertionID,ASSERTIONID,NULL); - MARSHALL_STRING_ATTRIB(Issuer,ISSUER,NULL); + domElement->setAttributeNS(nullptr, ASSERTIONID_ATTRIB_NAME, m_AssertionID); + if (*m_MinorVersion!=chDigit_0) { +#ifdef XMLTOOLING_XERCESC_BOOLSETIDATTRIBUTE + domElement->setIdAttributeNS(nullptr, ASSERTIONID_ATTRIB_NAME, true); +#else + domElement->setIdAttributeNS(nullptr, ASSERTIONID_ATTRIB_NAME); +#endif + } + MARSHALL_STRING_ATTRIB(Issuer,ISSUER,nullptr); if (!m_IssueInstant) { - const_cast(this)->m_IssueInstantEpoch=time(NULL); + const_cast(this)->m_IssueInstantEpoch=time(nullptr); const_cast(this)->m_IssueInstant=new DateTime(m_IssueInstantEpoch); } - MARSHALL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,NULL); + MARSHALL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,nullptr); } - + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(Conditions,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILD(Advice,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILD(Signature,XMLConstants::XMLSIG_NS,false); - PROC_TYPED_CHILDREN(AuthenticationStatement,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILDREN(AttributeStatement,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILDREN(AuthorizationDecisionStatement,SAMLConstants::SAML1_NS,false); - PROC_TYPED_CHILDREN(SubjectStatement,SAMLConstants::SAML1_NS,true); - PROC_TYPED_CHILDREN(Statement,SAMLConstants::SAML1_NS,true); + PROC_TYPED_CHILD(Conditions,SAML1_NS,false); + PROC_TYPED_CHILD(Advice,SAML1_NS,false); + PROC_TYPED_CHILD(Signature,XMLSIG_NS,false); + PROC_TYPED_CHILDREN(AuthenticationStatement,SAML1_NS,false); + PROC_TYPED_CHILDREN(AttributeStatement,SAML1_NS,false); + PROC_TYPED_CHILDREN(AuthorizationDecisionStatement,SAML1_NS,false); + PROC_TYPED_CHILDREN(SubjectStatement,SAML1_NS,true); + PROC_TYPED_CHILDREN(Statement,SAML1_NS,true); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } - + + void unmarshallAttributes(const DOMElement* domElement) { + // Standard processing, but then we check IDness. + AbstractXMLObjectUnmarshaller::unmarshallAttributes(domElement); + if (m_AssertionID && (!m_MinorVersion || *m_MinorVersion!=chDigit_0)) { +#ifdef XMLTOOLING_XERCESC_BOOLSETIDATTRIBUTE + const_cast(domElement)->setIdAttributeNS(nullptr, ASSERTIONID_ATTRIB_NAME, true); +#else + const_cast(domElement)->setIdAttributeNS(nullptr, ASSERTIONID_ATTRIB_NAME); +#endif + } + } + void processAttribute(const DOMAttr* attribute) { static const XMLCh MAJORVERSION[] = UNICODE_LITERAL_12(M,a,j,o,r,V,e,r,s,i,o,n); - if (XMLHelper::isNodeNamed(attribute,NULL,MAJORVERSION)) { - if (!XMLString::equals(attribute->getValue(),XMLConstants::XML_ONE)) + if (XMLHelper::isNodeNamed(attribute,nullptr,MAJORVERSION)) { + if (!XMLString::equals(attribute->getValue(),XML_ONE)) throw UnmarshallingException("Assertion has invalid major version."); } - PROC_INTEGER_ATTRIB(MinorVersion,MINORVERSION,NULL); - PROC_ID_ATTRIB(AssertionID,ASSERTIONID,NULL); - PROC_STRING_ATTRIB(Issuer,ISSUER,NULL); - PROC_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,NULL); + PROC_INTEGER_ATTRIB(MinorVersion,MINORVERSION,nullptr); + PROC_STRING_ATTRIB(AssertionID,ASSERTIONID,nullptr); + PROC_STRING_ATTRIB(Issuer,ISSUER,nullptr); + PROC_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,nullptr); } }; - + }; }; @@ -1082,11 +1149,13 @@ IMPL_XMLOBJECTBUILDER(AudienceRestrictionCondition); IMPL_XMLOBJECTBUILDER(AuthenticationStatement); IMPL_XMLOBJECTBUILDER(AuthorizationDecisionStatement); IMPL_XMLOBJECTBUILDER(AuthorityBinding); +IMPL_XMLOBJECTBUILDER(Condition); IMPL_XMLOBJECTBUILDER(Conditions); IMPL_XMLOBJECTBUILDER(ConfirmationMethod); IMPL_XMLOBJECTBUILDER(DoNotCacheCondition); IMPL_XMLOBJECTBUILDER(Evidence); IMPL_XMLOBJECTBUILDER(NameIdentifier); +IMPL_XMLOBJECTBUILDER(Statement); IMPL_XMLOBJECTBUILDER(Subject); IMPL_XMLOBJECTBUILDER(SubjectConfirmation); IMPL_XMLOBJECTBUILDER(SubjectConfirmationData);