X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Fio%2FAbstractXMLObjectMarshaller.h;h=16eb776a185a09d7e7ee5dfbb37eb30d8526cb87;hb=a0d768778a8f5f539b909baf5b115e70ea765f0f;hp=d4c574d8e94ffe828629c9b4204ef3fab1b545f4;hpb=5cb314df178f78c6fa7b9826c2c5a5298ec7a473;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/io/AbstractXMLObjectMarshaller.h b/xmltooling/io/AbstractXMLObjectMarshaller.h index d4c574d..16eb776 100644 --- a/xmltooling/io/AbstractXMLObjectMarshaller.h +++ b/xmltooling/io/AbstractXMLObjectMarshaller.h @@ -1,5 +1,5 @@ /* -* 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. @@ -15,12 +15,12 @@ */ /** - * @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 @@ -38,24 +38,26 @@ namespace xmltooling { 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* sigs=NULL + ,const std::vector* 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* sigs=NULL + ,const std::vector* sigs=nullptr + ,const Credential* credential=nullptr #endif ) const; protected: - AbstractXMLObjectMarshaller() {} + AbstractXMLObjectMarshaller(); /** * Sets the given element as the Document Element of the given Document. @@ -64,13 +66,7 @@ namespace xmltooling { * @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 /** @@ -79,11 +75,14 @@ namespace xmltooling { * * @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* sigs) const; + void marshallInto( + xercesc::DOMElement* targetElement, const std::vector* sigs, const Credential* credential=nullptr + ) const; #else /** * Marshalls the XMLObject into the given DOM Element. @@ -93,7 +92,7 @@ namespace xmltooling { * * @throws MarshallingException thrown if there is a problem marshalling the object */ - void marshallInto(DOMElement* targetElement) const; + void marshallInto(xercesc::DOMElement* targetElement) const; #endif /** @@ -104,23 +103,35 @@ namespace xmltooling { * @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. @@ -129,7 +140,7 @@ namespace xmltooling { * * @throws MarshallingException thrown if there is a problem marshalling an attribute */ - virtual void marshallAttributes(DOMElement* domElement) const {} + virtual void marshallAttributes(xercesc::DOMElement* domElement) const; }; };