AbstractXMLObjectMarshaller::AbstractXMLObjectMarshaller()\r
: m_log(&Category::getInstance(XMLTOOLING_LOGCAT".Marshaller")) {}\r
\r
-DOMElement* AbstractXMLObjectMarshaller::marshall(XMLObject* xmlObject, DOMDocument* document) const\r
+DOMElement* AbstractXMLObjectMarshaller::marshall(XMLObject* xmlObject, DOMDocument* document, MarshallingContext* ctx) const\r
{\r
#ifdef _DEBUG\r
xmltooling::NDC ndc("marshall");\r
xmlObject->getElementQName().getNamespaceURI(), xmlObject->getElementQName().getLocalPart()\r
);\r
setDocumentElement(document, domElement);\r
- marshallInto(*xmlObject, domElement);\r
+ marshallInto(*xmlObject, domElement, ctx);\r
\r
//Recache the DOM.\r
if (dc) {\r
}\r
}\r
\r
-DOMElement* AbstractXMLObjectMarshaller::marshall(XMLObject* xmlObject, DOMElement* parentElement) const\r
+DOMElement* AbstractXMLObjectMarshaller::marshall(XMLObject* xmlObject, DOMElement* parentElement, MarshallingContext* ctx) const\r
{\r
#ifdef _DEBUG\r
xmltooling::NDC ndc("marshall");\r
xmlObject->getElementQName().getNamespaceURI(), xmlObject->getElementQName().getLocalPart()\r
);\r
parentElement->appendChild(domElement);\r
- marshallInto(*xmlObject, domElement);\r
+ marshallInto(*xmlObject, domElement, ctx);\r
\r
//Recache the DOM.\r
if (dc) {\r
\r
return domElement;\r
}\r
- \r
-void AbstractXMLObjectMarshaller::marshallInto(XMLObject& xmlObject, DOMElement* targetElement) const\r
+\r
+#ifndef XMLTOOLING_NO_XMLSEC\r
+ class _signit : public unary_function<const pair<Signature*,const SigningContext*>&, void> {\r
+ public:\r
+ void operator()(const pair<Signature*,const SigningContext*>& p) const {\r
+ p.first->sign(p.second);\r
+ }\r
+ };\r
+#endif\r
+\r
+void AbstractXMLObjectMarshaller::marshallInto(\r
+ XMLObject& xmlObject, DOMElement* targetElement, MarshallingContext* ctx\r
+ ) const\r
{\r
if (xmlObject.getElementQName().hasPrefix())\r
targetElement->setPrefix(xmlObject.getElementQName().getPrefix());\r
marshallChildElements(xmlObject, targetElement);\r
marshallElementContent(xmlObject, targetElement);\r
\r
- /* TODO Signing/Encryption\r
- if (xmlObject instanceof SignableXMLObject) {\r
- signElement(targetElement, xmlObject);\r
- }\r
-\r
- if (xmlObject instanceof EncryptableXMLObject) {\r
- encryptElement(targetElement, xmlObject);\r
+#ifndef XMLTOOLING_NO_XMLSEC\r
+ if (ctx) {\r
+ for_each(ctx->m_signingContexts.begin(),ctx->m_signingContexts.end(),_signit());\r
}\r
- */\r
+#endif\r
}\r
\r
void AbstractXMLObjectMarshaller::marshallElementType(XMLObject& xmlObject, DOMElement* domElement) const\r
);\r
throw MarshallingException("Marshaller found unknown child element, but no default marshaller was found.");\r
}\r
- element->appendChild(marshaller->marshall(obj, element));\r
+ marshaller->marshall(obj, element);\r
}\r
};\r
\r