/*
-* Copyright 2001-2007 Internet2
+* Copyright 2001-2010 Internet2
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
/**
- * @file AbstractXMLObjectMarshaller.h
+ * @file xmltooling/io/AbstractXMLObjectMarshaller.h
*
* A mix-in to implement object marshalling with DOM reuse.
*/
-#if !defined(__xmltooling_xmlmarshaller_h__)
+#ifndef __xmltooling_xmlmarshaller_h__
#define __xmltooling_xmlmarshaller_h__
#include <xmltooling/AbstractDOMCachingXMLObject.h>
class XMLTOOL_API AbstractXMLObjectMarshaller : public virtual AbstractXMLObject
{
public:
- virtual ~AbstractXMLObjectMarshaller() {}
+ virtual ~AbstractXMLObjectMarshaller();
- DOMElement* marshall(
- DOMDocument* document=NULL
+ xercesc::DOMElement* marshall(
+ xercesc::DOMDocument* document=nullptr
#ifndef XMLTOOLING_NO_XMLSEC
- ,const std::vector<xmlsignature::Signature*>* sigs=NULL
+ ,const std::vector<xmlsignature::Signature*>* sigs=nullptr
+ ,const Credential* credential=nullptr
#endif
) const;
- DOMElement* marshall(
- DOMElement* parentElement
+ xercesc::DOMElement* marshall(
+ xercesc::DOMElement* parentElement
#ifndef XMLTOOLING_NO_XMLSEC
- ,const std::vector<xmlsignature::Signature*>* sigs=NULL
+ ,const std::vector<xmlsignature::Signature*>* sigs=nullptr
+ ,const Credential* credential=nullptr
#endif
) const;
protected:
- AbstractXMLObjectMarshaller() {}
+ AbstractXMLObjectMarshaller();
/**
* Sets the given element as the Document Element of the given Document.
* @param document the document
* @param element the Element that will serve as the Document Element
*/
- void setDocumentElement(DOMDocument* document, DOMElement* element) const {
- DOMElement* documentRoot = document->getDocumentElement();
- if (documentRoot)
- document->replaceChild(element, documentRoot);
- else
- document->appendChild(element);
- }
+ void setDocumentElement(xercesc::DOMDocument* document, xercesc::DOMElement* element) const;
#ifndef XMLTOOLING_NO_XMLSEC
/**
*
* @param targetElement the Element into which the XMLObject is marshalled into
* @param sigs optional array of signatures to create after marshalling
+ * @param credential optional credential to supply signing key and related info
*
* @throws MarshallingException thrown if there is a problem marshalling the object
* @throws SignatureException thrown if a problem occurs during signature creation
*/
- void marshallInto(DOMElement* targetElement, const std::vector<xmlsignature::Signature*>* sigs) const;
+ void marshallInto(
+ xercesc::DOMElement* targetElement, const std::vector<xmlsignature::Signature*>* sigs, const Credential* credential=nullptr
+ ) const;
#else
/**
* Marshalls the XMLObject into the given DOM Element.
*
* @throws MarshallingException thrown if there is a problem marshalling the object
*/
- void marshallInto(DOMElement* targetElement) const;
+ void marshallInto(xercesc::DOMElement* targetElement) const;
#endif
/**
* @throws MarshallingException thrown if the type on the XMLObject is doesn't contain
* a local name, prefix, and namespace URI
*/
- void marshallElementType(DOMElement* domElement) const;
+ void marshallElementType(xercesc::DOMElement* domElement) const;
/**
* Creates the xmlns attributes for any namespaces set on the XMLObject.
*
* @param domElement the DOM element the namespaces will be added to
*/
- void marshallNamespaces(DOMElement* domElement) const;
+ void marshallNamespaces(xercesc::DOMElement* domElement) const;
+#ifndef XMLTOOLING_NO_XMLSEC
/**
* Marshalls the text content and/or child elements of the XMLObject.
*
* @param domElement the DOM element that will recieved the marshalled children
+ * @param credential optional credential to supply signing key and related info
*
* @throws MarshallingException thrown if there is a problem marshalling a child element
*/
- void marshallContent(DOMElement* domElement) const;
+ void marshallContent(xercesc::DOMElement* domElement, const Credential* credential) const;
+#else
+ /**
+ * Marshalls the text content and/or child elements of the XMLObject.
+ *
+ * @param domElement the DOM element that will recieved the marshalled children
+ *
+ * @throws MarshallingException thrown if there is a problem marshalling a child element
+ */
+ void marshallContent(xercesc::DOMElement* domElement) const;
+#endif
/**
* Marshalls the attributes from the XMLObject into the given DOM element.
*
* @throws MarshallingException thrown if there is a problem marshalling an attribute
*/
- virtual void marshallAttributes(DOMElement* domElement) const {}
+ virtual void marshallAttributes(xercesc::DOMElement* domElement) const;
};
};