+ 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);
+ }
+ };
+