Default support for arbitrary DOM objects.
[shibboleth/xmltooling.git] / xmltooling / io / Marshaller.cpp
index fe7424e..5d6a82e 100644 (file)
@@ -35,33 +35,32 @@ map<QName,Marshaller*> Marshaller::m_map;
 \r
 Marshaller* Marshaller::m_default=NULL;\r
 \r
-const Marshaller* Marshaller::getMarshaller(const DOMElement* domElement)\r
+const Marshaller* Marshaller::getMarshaller(const XMLObject* xmlObject)\r
 {\r
 #ifdef _DEBUG\r
     xmltooling::NDC ndc("getMarshaller");\r
 #endif\r
     Category& log=Category::getInstance(XMLTOOLING_LOGCAT".Marshaller");\r
  \r
-    auto_ptr<QName> schemaType(XMLHelper::getXSIType(domElement));\r
-    const Marshaller* m = getMarshaller(*(schemaType.get()));\r
+    const QName* type=xmlObject->getSchemaType();\r
+    const Marshaller* m = type ? getMarshaller(*type) : NULL;\r
     if (m) {\r
         if (log.isDebugEnabled()) {\r
-            log.debug("Located Marshaller for schema type: %s", schemaType->toString().c_str());\r
+            log.debug("located Marshaller for schema type: %s", type->toString().c_str());\r
         }\r
         return m;\r
     }\r
     \r
-    auto_ptr<QName> elementName(XMLHelper::getNodeQName(domElement));\r
-    m = getMarshaller(*(elementName.get()));\r
+    m = getMarshaller(xmlObject->getElementQName());\r
     if (m) {\r
         if (log.isDebugEnabled()) {\r
-            log.debug("Located Marshaller for element name: %s", elementName->toString().c_str());\r
+            log.debug("located Marshaller for element name: %s", xmlObject->getElementQName().toString().c_str());\r
         }\r
         return m;\r
     }\r
 \r
-    log.error("No Marshaller was registered for element: %s", elementName->toString().c_str());\r
-    return NULL;\r
+    log.error("no Marshaller registered for element (%s), returning default", xmlObject->getElementQName().toString().c_str());\r
+    return m_default;\r
 }\r
 \r
 void Marshaller::destroyMarshallers()\r