\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
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
}\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
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
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
+\r
+ if (m_schemaLocation) {\r
+ static const XMLCh schemaLocation[]= UNICODE_LITERAL_14(s,c,h,e,m,a,L,o,c,a,t,i,o,n);\r
+ if (targetElement->getParentNode()==NULL || targetElement->getParentNode()->getNodeType()==DOMNode::DOCUMENT_NODE)\r
+ targetElement->setAttributeNS(XMLConstants::XSI_NS,schemaLocation,m_schemaLocation); \r
+ }\r
+\r
marshallElementType(targetElement);\r
marshallNamespaces(targetElement);\r
marshallAttributes(targetElement);\r
marshallChildElements(targetElement);\r
marshallElementContent(targetElement);\r
-\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