/*
-* Copyright 2001-2006 Internet2
+* Copyright 2001-2007 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 thread-safe abstract marshaller.
+ * 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>
namespace xmltooling {
/**
- * A thread-safe abstract marshaller.
+ * A mix-in to implement object marshalling with DOM reuse.
*/
class XMLTOOL_API AbstractXMLObjectMarshaller : public virtual AbstractXMLObject
{
public:
virtual ~AbstractXMLObjectMarshaller() {}
- DOMElement* marshall(
- DOMDocument* document=NULL
+ xercesc::DOMElement* marshall(
+ xercesc::DOMDocument* document=NULL
#ifndef XMLTOOLING_NO_XMLSEC
,const std::vector<xmlsignature::Signature*>* sigs=NULL
+ ,const Credential* credential=NULL
#endif
) const;
- DOMElement* marshall(
- DOMElement* parentElement
+ xercesc::DOMElement* marshall(
+ xercesc::DOMElement* parentElement
#ifndef XMLTOOLING_NO_XMLSEC
,const std::vector<xmlsignature::Signature*>* sigs=NULL
+ ,const Credential* credential=NULL
#endif
) const;
* @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();
+ void setDocumentElement(xercesc::DOMDocument* document, xercesc::DOMElement* element) const {
+ xercesc::DOMElement* documentRoot = document->getDocumentElement();
if (documentRoot)
document->replaceChild(element, documentRoot);
else
document->appendChild(element);
}
+#ifndef XMLTOOLING_NO_XMLSEC
/**
* Marshalls the XMLObject into the given DOM Element.
* The DOM Element must be within a DOM tree rooted in the owning Document.
*
* @param targetElement the Element into which the XMLObject is marshalled into
- * @param ctx optional marshalling context
+ * @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
-#ifndef XMLTOOLING_NO_XMLSEC
- ,const std::vector<xmlsignature::Signature*>* sigs
-#endif
+ xercesc::DOMElement* targetElement, const std::vector<xmlsignature::Signature*>* sigs, const Credential* credential=NULL
) const;
+#else
+ /**
+ * Marshalls the XMLObject into the given DOM Element.
+ * The DOM Element must be within a DOM tree rooted in the owning Document.
+ *
+ * @param targetElement the Element into which the XMLObject is marshalled into
+ *
+ * @throws MarshallingException thrown if there is a problem marshalling the object
+ */
+ void marshallInto(xercesc::DOMElement* targetElement) const;
+#endif
/**
* Creates an xsi:type attribute, corresponding to the given type of the XMLObject, on the DOM element.
* @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(xercesc::DOMElement* domElement, const Credential* credential) const;
+#else
/**
* Marshalls the text content and/or child elements of the XMLObject.
*
*
* @throws MarshallingException thrown if there is a problem marshalling a child element
*/
- void marshallContent(DOMElement* domElement) const;
+ 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 {}
};
};