if (cachedDOM) {\r
if (!document || document==cachedDOM->getOwnerDocument()) {\r
XT_log.debug("XMLObject has a usable cached DOM, reusing it");\r
- setDocumentElement(cachedDOM->getOwnerDocument(),cachedDOM);\r
+ if (document)\r
+ setDocumentElement(cachedDOM->getOwnerDocument(),cachedDOM);\r
dc->releaseParentDOM(true);\r
return cachedDOM;\r
}\r
void AbstractXMLObjectMarshaller::marshallInto(XMLObject* xmlObject, DOMElement* targetElement) const\r
{\r
targetElement->setPrefix(xmlObject->getElementQName().getPrefix());\r
+ marshallElementType(xmlObject, targetElement);\r
marshallNamespaces(xmlObject, targetElement);\r
marshallAttributes(xmlObject, targetElement);\r
marshallChildElements(xmlObject, targetElement);\r
marshallElementContent(xmlObject, targetElement);\r
- marshallElementType(xmlObject, targetElement);\r
\r
/* TODO Signing/Encryption\r
if (xmlObject instanceof SignableXMLObject) {\r
void operator()(DOMElement* domElement, const Namespace& ns) const {\r
const XMLCh* prefix=ns.getNamespacePrefix();\r
const XMLCh* uri=ns.getNamespaceURI();\r
+ \r
+ // Check to see if the prefix is already declared properly above this node.\r
+ if (!ns.alwaysDeclare() && domElement->getParentNode() &&\r
+ XMLString::equals(domElement->getParentNode()->lookupNamespaceURI(prefix),uri))\r
+ return;\r
+ \r
if (prefix && *prefix) {\r
XMLCh* xmlns=new XMLCh[XMLString::stringLen(XMLConstants::XMLNS_PREFIX) + XMLString::stringLen(prefix) + 2*sizeof(XMLCh)];\r
*xmlns=chNull;\r
);\r
throw MarshallingException("Marshaller found unknown child element, but no default marshaller was found.");\r
}\r
- element->appendChild(marshaller->marshall(obj, element->getOwnerDocument()));\r
+ element->appendChild(marshaller->marshall(obj, element));\r
}\r
};\r
\r