-/*
-* 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.
- * You may obtain a copy of the License at
+/**
+ * Licensed to the University Corporation for Advanced Internet
+ * Development, Inc. (UCAID) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for
+ * additional information regarding copyright ownership.
+ *
+ * UCAID licenses this file to you 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
+ * 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.
+ * 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
+ * @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 Credential* credential=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 Credential* credential=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
/**
* @throws SignatureException thrown if a problem occurs during signature creation
*/
void marshallInto(
- DOMElement* targetElement, const std::vector<xmlsignature::Signature*>* sigs, const Credential* credential=NULL
+ xercesc::DOMElement* targetElement, const std::vector<xmlsignature::Signature*>* sigs, const Credential* credential=nullptr
) const;
#else
/**
*
* @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
/**
*
* @throws MarshallingException thrown if there is a problem marshalling a child element
*/
- void marshallContent(DOMElement* domElement, const Credential* credential) const;
+ 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
/**
*
* @throws MarshallingException thrown if there is a problem marshalling an attribute
*/
- virtual void marshallAttributes(DOMElement* domElement) const {}
+ virtual void marshallAttributes(xercesc::DOMElement* domElement) const;
+
+ /**
+ * Called before marshalling in the event that a new DOM is being generated.
+ * <p>Allows objects to adjust internal state prior to the marshalling step.
+ */
+ virtual void prepareForMarshalling() const;
};
};