Refactored Signature signing/validation, various Validator bugs fixed.
[shibboleth/cpp-xmltooling.git] / xmltooling / io / AbstractXMLObjectMarshaller.cpp
index 8567d59..5d22362 100644 (file)
@@ -44,7 +44,12 @@ using namespace std;
 \r
 #define XT_log (*static_cast<Category*>(m_log))\r
 \r
-DOMElement* AbstractXMLObjectMarshaller::marshall(DOMDocument* document, MarshallingContext* ctx) const\r
+DOMElement* AbstractXMLObjectMarshaller::marshall(\r
+    DOMDocument* document\r
+#ifndef XMLTOOLING_NO_XMLSEC\r
+    ,const std::vector<xmlsignature::Signature*>* sigs\r
+#endif\r
+    ) const\r
 {\r
 #ifdef _DEBUG\r
     xmltooling::NDC ndc("marshall");\r
@@ -87,8 +92,11 @@ DOMElement* AbstractXMLObjectMarshaller::marshall(DOMDocument* document, Marshal
             getElementQName().getNamespaceURI(), getElementQName().getLocalPart()\r
             );\r
         setDocumentElement(document, domElement);\r
-        marshallInto(domElement, ctx);\r
-\r
+#ifndef XMLTOOLING_NO_XMLSEC\r
+        marshallInto(domElement, sigs);\r
+#else\r
+        marshallInto(domElement);\r
+#endif\r
         //Recache the DOM.\r
         XT_log.debug("caching DOM for XMLObject (document is %sbound)", bindDocument ? "" : "not ");\r
         setDOM(domElement, bindDocument);\r
@@ -105,7 +113,12 @@ DOMElement* AbstractXMLObjectMarshaller::marshall(DOMDocument* document, Marshal
     }\r
 }\r
 \r
-DOMElement* AbstractXMLObjectMarshaller::marshall(DOMElement* parentElement, MarshallingContext* ctx) const\r
+DOMElement* AbstractXMLObjectMarshaller::marshall(\r
+    DOMElement* parentElement\r
+#ifndef XMLTOOLING_NO_XMLSEC\r
+    ,const std::vector<xmlsignature::Signature*>* sigs\r
+#endif\r
+    ) const\r
 {\r
 #ifdef _DEBUG\r
     xmltooling::NDC ndc("marshall");\r
@@ -141,7 +154,11 @@ DOMElement* AbstractXMLObjectMarshaller::marshall(DOMElement* parentElement, Mar
         getElementQName().getNamespaceURI(), getElementQName().getLocalPart()\r
         );\r
     parentElement->appendChild(domElement);\r
-    marshallInto(domElement, ctx);\r
+#ifndef XMLTOOLING_NO_XMLSEC\r
+    marshallInto(domElement, sigs);\r
+#else\r
+    marshallInto(domElement);\r
+#endif\r
 \r
     //Recache the DOM.\r
     XT_log.debug("caching DOM for XMLObject");\r
@@ -151,16 +168,12 @@ DOMElement* AbstractXMLObjectMarshaller::marshall(DOMElement* parentElement, Mar
     return domElement;\r
 }\r
 \r
+void AbstractXMLObjectMarshaller::marshallInto(\r
+    DOMElement* targetElement\r
 #ifndef XMLTOOLING_NO_XMLSEC\r
-    class _signit : public unary_function<const pair<Signature*,SigningContext*>&, void> {\r
-    public:\r
-        void operator()(const pair<Signature*,SigningContext*>& p) const {\r
-            p.first->sign(*(p.second));\r
-        }\r
-    };\r
+    ,const std::vector<xmlsignature::Signature*>* sigs\r
 #endif\r
-\r
-void AbstractXMLObjectMarshaller::marshallInto(DOMElement* targetElement, MarshallingContext* ctx) const\r
+    ) const\r
 {\r
     if (getElementQName().hasPrefix())\r
         targetElement->setPrefix(getElementQName().getPrefix());\r
@@ -171,8 +184,8 @@ void AbstractXMLObjectMarshaller::marshallInto(DOMElement* targetElement, Marsha
     marshallElementContent(targetElement);\r
 \r
 #ifndef XMLTOOLING_NO_XMLSEC\r
-    if (ctx) {\r
-        for_each(ctx->m_signingContexts.begin(),ctx->m_signingContexts.end(),_signit());\r
+    if (sigs) {\r
+        for_each(sigs->begin(),sigs->end(),mem_fun<void,Signature>(&Signature::sign));\r
     }\r
 #endif\r
 }\r