Shortcuts for unmarshalling in builder interface, adjusted tests
[shibboleth/xmltooling.git] / xmltooling / io / AbstractXMLObjectUnmarshaller.cpp
index 701494b..797b035 100644 (file)
@@ -43,6 +43,11 @@ XMLObject* AbstractXMLObjectUnmarshaller::unmarshall(DOMElement* element, bool b
     xmltooling::NDC ndc("unmarshall");\r
 #endif\r
 \r
+    if (!XMLString::equals(element->getNamespaceURI(),getElementQName().getNamespaceURI()) ||\r
+        !XMLString::equals(element->getLocalName(),getElementQName().getLocalPart())) {\r
+        throw UnmarshallingException("Unrecognized element supplied to implementation for unmarshalling.");\r
+    }\r
+\r
     if (XT_log.isDebugEnabled()) {\r
         auto_ptr_char dname(element->getNodeName());\r
         XT_log.debug("unmarshalling DOM element (%s)", dname.get());\r
@@ -159,8 +164,7 @@ void AbstractXMLObjectUnmarshaller::unmarshallChildElements(const DOMElement* do
             }\r
 \r
             // Retain ownership of the unmarshalled child until it's processed by the parent.\r
-            auto_ptr<XMLObject> childObject(builder->buildObject(static_cast<DOMElement*>(childNode)));\r
-            childObject->unmarshall(static_cast<DOMElement*>(childNode));\r
+            auto_ptr<XMLObject> childObject(builder->buildFromElement(static_cast<DOMElement*>(childNode)));\r
             processChildElement(childObject.get(), static_cast<DOMElement*>(childNode));\r
             childObject.release();\r
         }\r