/**
* Creates an empty XMLObject with a particular element name.
+ * The results are undefined if elementLocalName is NULL or empty.
*
* @param namespaceURI namespace URI for element
* @param elementLocalName local name of element
) const=0;
/**
- * Creates an empty XMLObject with a defaulted element name.
- *
- * @return the empty XMLObject
- */
- virtual XMLObject* buildObject() const {
- return buildObject(NULL,NULL,NULL);
- }
-
- /**
* Creates an empty XMLObject with a particular element name.
*
* @param q QName of element for object
* @return the empty XMLObject
*/
- virtual XMLObject* buildObject(const QName& q) const {
+ XMLObject* buildFromQName(const QName& q) const {
return buildObject(q.getNamespaceURI(),q.getLocalPart(),q.getPrefix());
}
* @param bindDocument true iff the XMLObject should take ownership of the DOM Document
* @return the unmarshalled XMLObject
*/
- virtual XMLObject* buildFromElement(DOMElement* element, bool bindDocument=false) const {
+ XMLObject* buildFromElement(DOMElement* element, bool bindDocument=false) const {
std::auto_ptr<XMLObject> ret(buildObject(element->getNamespaceURI(),element->getLocalName(),element->getPrefix()));
ret->unmarshall(element,bindDocument);
return ret.release();
* @param bindDocument true iff the XMLObject should take ownership of the DOM Document
* @return the unmarshalled XMLObject
*/
- virtual XMLObject* buildFromDocument(DOMDocument* doc, bool bindDocument=true) const {
+ XMLObject* buildFromDocument(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 key used to locate a builder
+ * @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->buildObject();
+ return b->buildFromQName(key);
b=getDefaultBuilder();
- return b ? b->buildObject() : NULL;
+ return b ? b->buildFromQName(key) : NULL;
}
/**
*/\r
#define REGISTER_EXCEPTION_FACTORY(name) XMLToolingException::registerFactory("xmltooling::"#name,name##Factory)\r
\r
+#if defined (_MSC_VER)\r
+ #pragma warning( push )\r
+ #pragma warning( disable : 4250 4251 )\r
+#endif\r
+\r
namespace xmltooling {\r
\r
/**\r
\r
};\r
\r
+#if defined (_MSC_VER)\r
+ #pragma warning( pop )\r
+#endif\r
+\r
#endif /* __xmltooling_exceptions_h__ */\r
XMLObject* AnyElementBuilder::buildObject(
const XMLCh* namespaceURI, const XMLCh* elementLocalName, const XMLCh* namespacePrefix
) const {
- if (XMLString::stringLen(elementLocalName)==0)
- throw XMLObjectException("Constructing this object requires an element name.");
return new AnyElementImpl(namespaceURI,elementLocalName,namespacePrefix);
}
class XMLTOOL_API AnyElementBuilder : public XMLObjectBuilder
{
public:
+ /**
+ * @see XMLObjectBuilder::buildObject(const XMLCh*,const XMLCh*,const XMLCh*)
+ */
XMLObject* buildObject(
const XMLCh* namespaceURI, const XMLCh* elementLocalName, const XMLCh* namespacePrefix=NULL
) const;
#if !defined(__xmltooling_unkelement_h__)\r
#define __xmltooling_unkelement_h__\r
\r
+#include <xmltooling/exceptions.h>\r
#include <xmltooling/XMLObjectBuilder.h>\r
#include <xmltooling/io/AbstractXMLObjectMarshaller.h>\r
#include <xmltooling/io/AbstractXMLObjectUnmarshaller.h>\r
};\r
\r
/**\r
- * Factory for UnknownElementImpl objects.\r
+ * Builder for UnknownElementImpl objects.\r
*/\r
class XMLTOOL_API UnknownElementBuilder : public XMLObjectBuilder\r
{\r
public:\r
+ /**\r
+ * @see XMLObjectBuilder::buildObject(const XMLCh*,const XMLCh*,const XMLCh*)\r
+ */\r
UnknownElementImpl* buildObject(\r
const XMLCh* namespaceURI, const XMLCh* elementLocalName, const XMLCh* namespacePrefix=NULL\r
) const {\r
#if !defined(__xmltooling_sig_h__) && !defined(XMLTOOLING_NO_XMLSEC)\r
#define __xmltooling_sig_h__\r
\r
-#include <xmltooling/XMLObject.h>\r
+#include <xmltooling/XMLObjectBuilder.h>\r
#include <xmltooling/signature/SigningContext.h>\r
#include <xmltooling/signature/VerifyingContext.h>\r
\r
Signature() {}\r
};\r
\r
+ /**\r
+ * Builder for Signature objects.\r
+ */\r
+ class XMLTOOL_API SignatureBuilder : public XMLObjectBuilder\r
+ {\r
+ public:\r
+ virtual ~SignatureBuilder() {}\r
+\r
+ /**\r
+ * Default typed builder method.\r
+ */\r
+ virtual Signature* buildObject() const=0;\r
+ };\r
};\r
\r
#endif /* __xmltooling_sig_h__ */\r
XMLSecSignatureImpl* buildObject(\r
const XMLCh* namespaceURI, const XMLCh* elementLocalName, const XMLCh* namespacePrefix=NULL\r
) const {\r
+ if (!XMLString::equals(namespaceURI,XMLConstants::XMLSIG_NS) || !XMLString::equals(elementLocalName, Signature::LOCAL_NAME))\r
+ throw XMLObjectException("XMLSecSignatureBuilder requires standard Signature element name.");\r
+ return buildObject();\r
+ }\r
+ \r
+ XMLSecSignatureImpl* buildObject() const {\r
return new XMLSecSignatureImpl();\r
}\r
};\r