X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Fio%2FAbstractXMLObjectMarshaller.h;h=16eb776a185a09d7e7ee5dfbb37eb30d8526cb87;hb=a0d768778a8f5f539b909baf5b115e70ea765f0f;hp=7d1928dc0784c2b22f1f49010f8395785b019967;hpb=7068408b1c6000ac3d207c782ba4f8c4e731b178;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/io/AbstractXMLObjectMarshaller.h b/xmltooling/io/AbstractXMLObjectMarshaller.h index 7d1928d..16eb776 100644 --- a/xmltooling/io/AbstractXMLObjectMarshaller.h +++ b/xmltooling/io/AbstractXMLObjectMarshaller.h @@ -1,133 +1,152 @@ -/* -* Copyright 2001-2006 Internet2 - * -* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file AbstractXMLObjectMarshaller.h - * - * A thread-safe abstract marshaller. - */ - -#if !defined(__xmltooling_xmlmarshaller_h__) -#define __xmltooling_xmlmarshaller_h__ - -#include - -namespace xmltooling { - - /** - * A thread-safe abstract marshaller. - */ - class XMLTOOL_API AbstractXMLObjectMarshaller : public virtual Marshaller - { - public: - virtual ~AbstractXMLObjectMarshaller() {} - - /** - * @see Marshaller::marshall(XMLObject*,DOMDocument*,const MarshallingContext*) - */ - DOMElement* marshall(XMLObject* xmlObject, DOMDocument* document=NULL, MarshallingContext* ctx=NULL) const; - - /** - * @see Marshaller::marshall(XMLObject*,DOMElement*,const MarshallingContext*) - */ - DOMElement* marshall(XMLObject* xmlObject, DOMElement* parentElement, MarshallingContext* ctx=NULL) const; - - protected: - AbstractXMLObjectMarshaller(); - - /** - * Sets the given element as the Document Element of the given Document. - * If the document already has a Document Element it is replaced by the given element. - * - * @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(documentRoot, element); - else - document->appendChild(element); - } - - /** - * Marshalls the given XMLObject into the given DOM Element. - * The DOM Element must be within a DOM tree rooted in the owning Document. - * - * @param xmlObject the XMLObject to marshall - * @param targetElement the Element into which the XMLObject is marshalled into - * @param ctx optional marshalling context - * - * @throws MarshallingException thrown if there is a problem marshalling the object - * @throws SignatureException thrown if a problem occurs during signature creation - */ - void marshallInto(XMLObject& xmlObject, DOMElement* targetElement, MarshallingContext* ctx) const; - - /** - * Creates an xsi:type attribute, corresponding to the given type of the XMLObject, on the DOM element. - * - * @param xmlObject the XMLObject - * @param domElement 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(XMLObject& xmlObject, DOMElement* domElement) const; - - /** - * Creates the xmlns attributes for any namespaces set on the given XMLObject. - * - * @param xmlObject the XMLObject - * @param domElement the DOM element the namespaces will be added to - */ - void marshallNamespaces(const XMLObject& xmlObject, DOMElement* domElement) const; - - /** - * Marshalls the child elements of the given XMLObject. - * - * @param xmlObject the XMLObject whose children will be marshalled - * @param domElement the DOM element that will recieved the marshalled children - * - * @throws MarshallingException thrown if there is a problem marshalling a child element - */ - void marshallChildElements(const XMLObject& xmlObject, DOMElement* domElement) const; - - /** - * Marshalls the attributes from the given XMLObject into the given DOM element. - * The XMLObject passed to this method is guaranteed to be of the target name - * specified during this marshaller's construction. - * - * @param xmlObject the XMLObject being marshalled - * @param domElement the DOM Element into which attributes will be marshalled - * - * @throws UnmarshallingException thrown if there is a problem unmarshalling an attribute - */ - virtual void marshallAttributes(const XMLObject& xmlObject, DOMElement* domElement) const=0; - - /** - * Marshalls data from the XMLObject into content of the DOM Element. - * - * @param xmlObject the XMLObject - * @param domElement the DOM element recieving the content - */ - virtual void marshallElementContent(const XMLObject& xmlObject, DOMElement* domElement) const=0; - - void* m_log; - }; - -}; - -#endif /* __xmltooling_xmlmarshaller_h__ */ +/* +* 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file xmltooling/io/AbstractXMLObjectMarshaller.h + * + * A mix-in to implement object marshalling with DOM reuse. + */ + +#ifndef __xmltooling_xmlmarshaller_h__ +#define __xmltooling_xmlmarshaller_h__ + +#include + +#if defined (_MSC_VER) + #pragma warning( push ) + #pragma warning( disable : 4250 4251 ) +#endif + +namespace xmltooling { + + /** + * A mix-in to implement object marshalling with DOM reuse. + */ + class XMLTOOL_API AbstractXMLObjectMarshaller : public virtual AbstractXMLObject + { + public: + virtual ~AbstractXMLObjectMarshaller(); + + xercesc::DOMElement* marshall( + xercesc::DOMDocument* document=nullptr +#ifndef XMLTOOLING_NO_XMLSEC + ,const std::vector* sigs=nullptr + ,const Credential* credential=nullptr +#endif + ) const; + + xercesc::DOMElement* marshall( + xercesc::DOMElement* parentElement +#ifndef XMLTOOLING_NO_XMLSEC + ,const std::vector* sigs=nullptr + ,const Credential* credential=nullptr +#endif + ) const; + + protected: + AbstractXMLObjectMarshaller(); + + /** + * Sets the given element as the Document Element of the given Document. + * If the document already has a Document Element it is replaced by the given element. + * + * @param document the document + * @param element the Element that will serve as the Document Element + */ + void setDocumentElement(xercesc::DOMDocument* document, xercesc::DOMElement* element) const; + +#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 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( + xercesc::DOMElement* targetElement, const std::vector* sigs, const Credential* credential=nullptr + ) 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. + * + * @param domElement 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(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(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. + * + * @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. + * + * @param domElement the DOM Element into which attributes will be marshalled + * + * @throws MarshallingException thrown if there is a problem marshalling an attribute + */ + virtual void marshallAttributes(xercesc::DOMElement* domElement) const; + }; + +}; + +#if defined (_MSC_VER) + #pragma warning( pop ) +#endif + +#endif /* __xmltooling_xmlmarshaller_h__ */