#endif
m_parserPool=new ParserPool();
+ m_validatingPool=new ParserPool(true,true);
m_lock=xercesc::XMLPlatformUtils::makeMutex();
// default registrations
delete m_parserPool;
m_parserPool=NULL;
+ delete m_validatingPool;
+ m_validatingPool=NULL;
#ifndef XMLTOOLING_NO_XMLSEC
delete m_xsecProvider;
#define __xmltooling_config_h__\r
\r
#include <xmltooling/Lockable.h>\r
+#include <xmltooling/util/ParserPool.h>\r
\r
namespace xmltooling {\r
\r
* @return true iff configuration was successful\r
*/\r
virtual bool log_config(const char* config=NULL)=0;\r
- \r
+\r
+ /**\r
+ * Obtains a non-validating parser pool.\r
+ * Library must be initialized first.\r
+ *\r
+ * @return reference to a non-validating parser pool.\r
+ */\r
+ virtual ParserPool& getParser() const=0;\r
+\r
+ /**\r
+ * Obtains a validating parser pool.\r
+ * Library must be initialized first. Schema/catalog registration must be\r
+ * externally synchronized.\r
+ *\r
+ * @return reference to a validating parser pool.\r
+ */\r
+ virtual ParserPool& getValidatingParser() const=0;\r
+\r
protected:\r
XMLToolingConfig() {}\r
};\r
static const XMLCh param[] = { chLatin_p, chLatin_a, chLatin_r, chLatin_a, chLatin_m, chNull };
static const XMLCh type[] = { chLatin_t, chLatin_y, chLatin_p, chLatin_e, chNull };
- DOMDocument* doc=XMLToolingInternalConfig::getInternalConfig().m_parserPool->parse(in);
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(in);
// Check root element.
const DOMElement* root=doc->getDocumentElement();
MemBufInputSource src(reinterpret_cast<const XMLByte*>(m_xml.c_str()),m_xml.length(),"UnknownElementImpl");\r
Wrapper4InputSource dsrc(&src,false);\r
log.debug("parsing XML back into DOM tree");\r
- DOMDocument* internalDoc=XMLToolingInternalConfig::getInternalConfig().m_parserPool->parse(dsrc);\r
+ DOMDocument* internalDoc=XMLToolingConfig::getConfig().getParser().parse(dsrc);\r
if (document) {\r
// The caller insists on using his own document, so we now have to import the thing\r
// into it. Then we're just dumping the one we built.\r
MemBufInputSource src(reinterpret_cast<const XMLByte*>(m_xml.c_str()),m_xml.length(),"UnknownElementImpl");\r
Wrapper4InputSource dsrc(&src,false);\r
log.debug("parsing XML back into DOM tree");\r
- DOMDocument* internalDoc=XMLToolingInternalConfig::getInternalConfig().m_parserPool->parse(dsrc);\r
+ DOMDocument* internalDoc=XMLToolingConfig::getConfig().getParser().parse(dsrc);\r
\r
log.debug("reimporting new DOM into caller-supplied document");\r
cachedDOM=static_cast<DOMElement*>(parentElement->getOwnerDocument()->importNode(internalDoc->getDocumentElement(), true));\r
class XMLToolingInternalConfig : public xmltooling::XMLToolingConfig
{
public:
- XMLToolingInternalConfig() : m_parserPool(NULL), m_lock(NULL) {
+ XMLToolingInternalConfig() : m_parserPool(NULL), m_validatingPool(NULL), m_lock(NULL) {
#ifndef XMLTOOLING_NO_XMLSEC
m_xsecProvider=NULL;
#endif
bool load_library(const char* path, void* context=NULL);
bool log_config(const char* config=NULL);
- // internal parser pool
- xmltooling::ParserPool* m_parserPool;
+ // parser access
+ ParserPool& getParser() const {
+ return *m_parserPool;
+ }
+
+ ParserPool& getValidatingParser() const {
+ return *m_validatingPool;
+ }
+
#ifndef XMLTOOLING_NO_XMLSEC
XSECProvider* m_xsecProvider;
#endif
private:
std::vector<void*> m_libhandles;
void* m_lock;
+ ParserPool* m_parserPool;
+ ParserPool* m_validatingPool;
};
/// @endcond
MemBufInputSource src(reinterpret_cast<const XMLByte*>(m_xml.c_str()),m_xml.length(),"XMLSecSignatureImpl");\r
Wrapper4InputSource dsrc(&src,false);\r
log.debug("parsing Signature XML back into DOM tree");\r
- DOMDocument* internalDoc=XMLToolingInternalConfig::getInternalConfig().m_parserPool->parse(dsrc);\r
+ DOMDocument* internalDoc=XMLToolingConfig::getConfig().getParser().parse(dsrc);\r
if (document) {\r
// The caller insists on using his own document, so we now have to import the thing\r
// into it. Then we're just dumping the one we built.\r
MemBufInputSource src(reinterpret_cast<const XMLByte*>(m_xml.c_str()),m_xml.length(),"XMLSecSignatureImpl");\r
Wrapper4InputSource dsrc(&src,false);\r
log.debug("parsing XML back into DOM tree");\r
- DOMDocument* internalDoc=XMLToolingInternalConfig::getInternalConfig().m_parserPool->parse(dsrc);\r
+ DOMDocument* internalDoc=XMLToolingConfig::getConfig().getParser().parse(dsrc);\r
\r
log.debug("reimporting new DOM into caller-supplied document");\r
cachedDOM=static_cast<DOMElement*>(parentElement->getOwnerDocument()->importNode(internalDoc->getDocumentElement(),true));\r
LocalFileInputSource fsrc(NULL,pathname);
Wrapper4InputSource domsrc(&fsrc,false);
try {
- DOMDocument* doc=XMLToolingInternalConfig::getInternalConfig().m_parserPool->parse(domsrc);
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(domsrc);
// Check root element.
const DOMElement* root=doc->getDocumentElement();
\r
string path=data_path + "ComplexXMLObject.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
\r
string path=data_path + "KeyInfo1.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=validatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getValidatingParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
\r
string path=data_path + "KeyInfo2.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=validatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getValidatingParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
\r
string path=data_path + "KeyInfo3.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
\r
string path=data_path + "SimpleXMLObjectWithAttribute.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
TS_ASSERT(rootElement->isEqualNode(doc->getDocumentElement()));\r
\r
string path=data_path + "SimpleXMLObjectWithContent.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
TS_ASSERT(rootElement->isEqualNode(doc->getDocumentElement()));\r
\r
string path=data_path + "SimpleXMLObjectWithChildren.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
TS_ASSERT(rootElement->isEqualNode(doc->getDocumentElement()));\r
//TS_TRACE(buf.c_str());\r
\r
istringstream in(buf);\r
- DOMDocument* doc=nonvalidatingPool->parse(in);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(in);\r
auto_ptr<SimpleXMLObject> sxObject2(dynamic_cast<SimpleXMLObject*>(b->buildFromDocument(doc)));\r
TS_ASSERT(sxObject2.get()!=NULL);\r
TS_ASSERT(sxObject2->getSignature()!=NULL);\r
\r
string path=data_path + "SimpleXMLObjectWithAttribute.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
\r
string path=data_path + "SimpleXMLObjectWithContent.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
\r
string path=data_path + "SimpleXMLObjectWithChildren.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
\r
string path=data_path + "SimpleXMLObjectWithChildren.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
\r
string path=data_path + "SimpleXMLObjectWithUnknownChild.xml";\r
ifstream fs(path.c_str());\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
\r
//#define XMLTOOLINGTEST_LEAKCHECK\r
\r
-ParserPool* validatingPool=NULL;\r
-ParserPool* nonvalidatingPool=NULL;\r
std::string data_path = "../xmltoolingtest/data/";\r
\r
class ToolingFixture : public CxxTest::GlobalFixture\r
XMLToolingConfig::getConfig().log_config();\r
if (!XMLToolingConfig::getConfig().init())\r
return false;\r
- validatingPool = new ParserPool(true,true);\r
- nonvalidatingPool = new ParserPool();\r
if (getenv("XMLTOOLINGTEST_DATA"))\r
data_path=std::string(getenv("XMLTOOLINGTEST_DATA")) + "/";\r
std::string catpath=data_path + "catalog.xml";\r
auto_ptr_XMLCh temp(catpath.c_str());\r
- return validatingPool->loadCatalog(temp.get());\r
+ return XMLToolingConfig::getConfig().getValidatingParser().loadCatalog(temp.get());\r
}\r
bool tearDownWorld() {\r
- delete validatingPool;\r
- delete nonvalidatingPool;\r
XMLToolingConfig::getConfig().term();\r
#if defined(_MSC_VER ) && defined(XMLTOOLINGTEST_LEAKCHECK)\r
_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );\r
\r
void testUnknown() {\r
ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml");\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
string buf1;\r
\r
void testUnknownWithDocChange() {\r
ifstream fs("../xmltoolingtest/data/SimpleXMLObjectWithChildren.xml");\r
- DOMDocument* doc=nonvalidatingPool->parse(fs);\r
+ DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);\r
TS_ASSERT(doc!=NULL);\r
\r
string buf1;\r
auto_ptr<XMLObject> xmlObject(b->buildFromDocument(doc)); // bind document\r
TS_ASSERT(xmlObject.get()!=NULL);\r
\r
- DOMDocument* newDoc=nonvalidatingPool->newDocument();\r
+ DOMDocument* newDoc=XMLToolingConfig::getConfig().getParser().newDocument();\r
DOMElement* rootElement=xmlObject->marshall(newDoc);\r
TS_ASSERT(rootElement!=NULL);\r
\r
<Tool\r
Name="VCCLCompilerTool"\r
Optimization="0"\r
- AdditionalIncludeDirectories=".."\r
+ AdditionalIncludeDirectories="$(SolutionDir)"\r
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"\r
MinimalRebuild="true"\r
BasicRuntimeChecks="3"\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories=".."\r
+ AdditionalIncludeDirectories="$(SolutionDir)"\r
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"\r
RuntimeLibrary="2"\r
UsePrecompiledHeader="0"\r
>\r
<Tool\r
Name="VCCustomBuildTool"\r
- CommandLine="\perl\bin\perl.exe -w \cxxtest\cxxtestgen.pl --part --have-eh --have-std --abort-on-fail -o "$(InputName)".cpp "$(InputPath)""\r
+ CommandLine="\perl\bin\perl.exe -w \cxxtest\cxxtestgen.pl --part --have-eh --have-std --abort-on-fail -o "$(InputName)".cpp "$(InputPath)"
"\r
Outputs=""$(InputName)".cpp"\r
/>\r
</FileConfiguration>\r
>\r
<Tool\r
Name="VCCustomBuildTool"\r
- CommandLine="\perl\bin\perl.exe -w \cxxtest\cxxtestgen.pl --part --have-eh --have-std --abort-on-fail -o "$(InputName)".cpp "$(InputPath)""\r
+ CommandLine="\perl\bin\perl.exe -w \cxxtest\cxxtestgen.pl --part --have-eh --have-std --abort-on-fail -o "$(InputName)".cpp "$(InputPath)"
"\r
Outputs=""$(InputName)".cpp"\r
/>\r
</FileConfiguration>\r