Stop defaulting in xercesc namespace.
[shibboleth/cpp-xmltooling.git] / xmltooling / XMLObjectBuilder.h
index f78ae6d..b096920 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright 2001-2006 Internet2
+ *  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.
@@ -26,6 +26,7 @@
 #include <map>
 #include <xmltooling/QName.h>
 #include <xmltooling/XMLObject.h>
+#include <xmltooling/util/XMLHelper.h>
 
 #if defined (_MSC_VER)
     #pragma warning( push )
@@ -46,15 +47,16 @@ namespace xmltooling {
         
         /**
          * Creates an empty XMLObject with a particular element name.
-         * The results are undefined if elementLocalName is NULL or empty.
+         * The results are undefined if localName is NULL or empty.
          * 
-         * @param namespaceURI          namespace URI for element
-         * @param elementLocalName      local name of element
-         * @param namespacePrefix       prefix of element name
+         * @param nsURI         namespace URI for element
+         * @param localName     local name of element
+         * @param prefix        prefix of element name
+         * @param schemaType    xsi:type of the object
          * @return the empty XMLObject
          */
         virtual XMLObject* buildObject(
-            const XMLCh* namespaceURI, const XMLCh* elementLocalName, const XMLCh* namespacePrefix=NULL
+            const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const QName* schemaType=NULL
             ) const=0;
 
         /**
@@ -74,8 +76,10 @@ namespace xmltooling {
          * @param bindDocument  true iff the XMLObject should take ownership of the DOM Document
          * @return the unmarshalled XMLObject
          */
-        XMLObject* buildFromElement(DOMElement* element, bool bindDocument=false) const {
-            std::auto_ptr<XMLObject> ret(buildObject(element->getNamespaceURI(),element->getLocalName(),element->getPrefix()));
+        XMLObject* buildFromElement(xercesc::DOMElement* element, bool bindDocument=false) const {
+            std::auto_ptr<XMLObject> ret(
+                buildObject(element->getNamespaceURI(),element->getLocalName(),element->getPrefix(),XMLHelper::getXSIType(element))
+                );
             ret->unmarshall(element,bindDocument);
             return ret.release();
         }
@@ -87,32 +91,18 @@ namespace xmltooling {
          * @param bindDocument  true iff the XMLObject should take ownership of the DOM Document
          * @return the unmarshalled XMLObject
          */
-        XMLObject* buildFromDocument(DOMDocument* doc, bool bindDocument=true) const {
+        XMLObject* buildFromDocument(xercesc::DOMDocument* doc, bool bindDocument=true) const {
             return buildFromElement(doc->getDocumentElement(),bindDocument);
         }
 
         /**
-         * Creates an empty XMLObject using the default build method, if a builder can be found.
-         * 
-         * @param key   the element key used to locate a builder
-         * @return  the empty object or NULL if no builder is available 
-         */
-        static XMLObject* buildOne(const QName& key) {
-            const XMLObjectBuilder* b=getBuilder(key);
-            if (b)
-                return b->buildFromQName(key);
-            b=getDefaultBuilder();
-            return b ? b->buildFromQName(key) : NULL;
-        }
-
-        /**
          * Creates an unmarshalled XMLObject using the default build method, if a builder can be found.
          * 
          * @param element       the unmarshalling source
          * @param bindDocument  true iff the new XMLObject should take ownership of the DOM Document
          * @return  the unmarshalled object or NULL if no builder is available 
          */
-        static XMLObject* buildOneFromElement(DOMElement* element, bool bindDocument=false) {
+        static XMLObject* buildOneFromElement(xercesc::DOMElement* element, bool bindDocument=false) {
             const XMLObjectBuilder* b=getBuilder(element);
             return b ? b->buildFromElement(element,bindDocument) : NULL;
         }
@@ -135,7 +125,7 @@ namespace xmltooling {
          * @param element the element for which to locate a builder
          * @return the builder or NULL
          */
-        static const XMLObjectBuilder* getBuilder(const DOMElement* element);
+        static const XMLObjectBuilder* getBuilder(const xercesc::DOMElement* element);
 
         /**
          * Retrieves the default XMLObjectBuilder for DOM elements