From: Scott Cantor Date: Thu, 2 Oct 2008 18:41:48 +0000 (+0000) Subject: https://issues.shibboleth.net/jira/browse/CPPXT-20 X-Git-Tag: 2.2.0~46 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=commitdiff_plain;h=bce2384b63da88bb371f03c9a9c4c20b69905983 https://issues.shibboleth.net/jira/browse/CPPXT-20 --- diff --git a/saml/saml2/metadata/impl/MetadataImpl.cpp b/saml/saml2/metadata/impl/MetadataImpl.cpp index cc23134..2dc16a1 100644 --- a/saml/saml2/metadata/impl/MetadataImpl.cpp +++ b/saml/saml2/metadata/impl/MetadataImpl.cpp @@ -73,6 +73,7 @@ namespace opensaml { { void init() { m_Lang=NULL; + m_LangPrefix=NULL; } protected: @@ -83,6 +84,7 @@ namespace opensaml { public: virtual ~localizedNameTypeImpl() { XMLString::release(&m_Lang); + XMLString::release(&m_LangPrefix); } localizedNameTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) @@ -94,18 +96,32 @@ namespace opensaml { : 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); } }; @@ -118,6 +134,7 @@ namespace opensaml { { void init() { m_Lang=NULL; + m_LangPrefix=NULL; } protected: @@ -128,6 +145,7 @@ namespace opensaml { public: virtual ~localizedURITypeImpl() { XMLString::release(&m_Lang); + XMLString::release(&m_LangPrefix); } localizedURITypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) @@ -139,18 +157,32 @@ namespace opensaml { : 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); } };