2 * Copyright 2001-2010 Internet2
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * @file xmltooling/io/AbstractXMLObjectMarshaller.h
20 * A mix-in to implement object marshalling with DOM reuse.
23 #ifndef __xmltooling_xmlmarshaller_h__
24 #define __xmltooling_xmlmarshaller_h__
26 #include <xmltooling/AbstractDOMCachingXMLObject.h>
28 #if defined (_MSC_VER)
29 #pragma warning( push )
30 #pragma warning( disable : 4250 4251 )
33 namespace xmltooling {
36 * A mix-in to implement object marshalling with DOM reuse.
38 class XMLTOOL_API AbstractXMLObjectMarshaller : public virtual AbstractXMLObject
41 virtual ~AbstractXMLObjectMarshaller();
43 xercesc::DOMElement* marshall(
44 xercesc::DOMDocument* document=nullptr
45 #ifndef XMLTOOLING_NO_XMLSEC
46 ,const std::vector<xmlsignature::Signature*>* sigs=nullptr
47 ,const Credential* credential=nullptr
51 xercesc::DOMElement* marshall(
52 xercesc::DOMElement* parentElement
53 #ifndef XMLTOOLING_NO_XMLSEC
54 ,const std::vector<xmlsignature::Signature*>* sigs=nullptr
55 ,const Credential* credential=nullptr
60 AbstractXMLObjectMarshaller();
63 * Sets the given element as the Document Element of the given Document.
64 * If the document already has a Document Element it is replaced by the given element.
66 * @param document the document
67 * @param element the Element that will serve as the Document Element
69 void setDocumentElement(xercesc::DOMDocument* document, xercesc::DOMElement* element) const;
71 #ifndef XMLTOOLING_NO_XMLSEC
73 * Marshalls the XMLObject into the given DOM Element.
74 * The DOM Element must be within a DOM tree rooted in the owning Document.
76 * @param targetElement the Element into which the XMLObject is marshalled into
77 * @param sigs optional array of signatures to create after marshalling
78 * @param credential optional credential to supply signing key and related info
80 * @throws MarshallingException thrown if there is a problem marshalling the object
81 * @throws SignatureException thrown if a problem occurs during signature creation
84 xercesc::DOMElement* targetElement, const std::vector<xmlsignature::Signature*>* sigs, const Credential* credential=nullptr
88 * Marshalls the XMLObject into the given DOM Element.
89 * The DOM Element must be within a DOM tree rooted in the owning Document.
91 * @param targetElement the Element into which the XMLObject is marshalled into
93 * @throws MarshallingException thrown if there is a problem marshalling the object
95 void marshallInto(xercesc::DOMElement* targetElement) const;
99 * Creates an xsi:type attribute, corresponding to the given type of the XMLObject, on the DOM element.
101 * @param domElement the DOM element
103 * @throws MarshallingException thrown if the type on the XMLObject is doesn't contain
104 * a local name, prefix, and namespace URI
106 void marshallElementType(xercesc::DOMElement* domElement) const;
109 * Creates the xmlns attributes for any namespaces set on the XMLObject.
111 * @param domElement the DOM element the namespaces will be added to
113 void marshallNamespaces(xercesc::DOMElement* domElement) const;
115 #ifndef XMLTOOLING_NO_XMLSEC
117 * Marshalls the text content and/or child elements of the XMLObject.
119 * @param domElement the DOM element that will recieved the marshalled children
120 * @param credential optional credential to supply signing key and related info
122 * @throws MarshallingException thrown if there is a problem marshalling a child element
124 void marshallContent(xercesc::DOMElement* domElement, const Credential* credential) const;
127 * Marshalls the text content and/or child elements of the XMLObject.
129 * @param domElement the DOM element that will recieved the marshalled children
131 * @throws MarshallingException thrown if there is a problem marshalling a child element
133 void marshallContent(xercesc::DOMElement* domElement) const;
137 * Marshalls the attributes from the XMLObject into the given DOM element.
139 * @param domElement the DOM Element into which attributes will be marshalled
141 * @throws MarshallingException thrown if there is a problem marshalling an attribute
143 virtual void marshallAttributes(xercesc::DOMElement* domElement) const;
148 #if defined (_MSC_VER)
149 #pragma warning( pop )
152 #endif /* __xmltooling_xmlmarshaller_h__ */