#include <syslog.h>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/framework/LocalFileFormatTarget.hpp>
using namespace xercesc;
class XMLReader
{
public:
XMLReader(): m_configFileParser(NULL), m_rootNode(NULL) { };
~XMLReader();
bool Initialize()
{
try
{
XMLPlatformUtils::Initialize();
}
catch( XMLException &e )
{
char *message = XMLString::transcode( e.getMessage() );
syslog(LOG_ERR, "XML toolkit initialization error: %s", message);
XMLString::release( &message );
return false;
}
m_rootNode = XMLString::transcode("beans");
m_configFileParser = new XercesDOMParser;
return true;
};
void readConfigFile(const char *);
private:
xercesc::XercesDOMParser *m_configFileParser;
XMLCh* m_rootNode;
};
XMLReader::~XMLReader()
{
try
{
delete m_configFileParser;
m_configFileParser = NULL;
XMLString::release( &m_rootNode );
}
catch( ... )
{
syslog(LOG_ERR, "Unknown exception encountered in TagNamesdtor");
}
try
{
XMLPlatformUtils::Terminate();
}
catch( xercesc::XMLException& e )
{
char *message = xercesc::XMLString::transcode( e.getMessage() );
syslog(LOG_ERR, "XML ttolkit teardown error: %s" , message);
XMLString::release( &message );
}
}
void XMLReader::readConfigFile(const char *configFile)
{
m_configFileParser->setValidationScheme( XercesDOMParser::Val_Never );
m_configFileParser->setDoNamespaces( false );
m_configFileParser->setDoSchema( false );
m_configFileParser->setLoadExternalDTD( false );
try
{
m_configFileParser->parse( configFile );
DOMDocument* xmlDoc = m_configFileParser->getDocument();
DOMElement* elementRoot = xmlDoc->getDocumentElement();
if( !elementRoot )
{
syslog(LOG_ERR, "empty document!");
};
XMLCh *sslContextTag = XMLString::transcode("sslContext");
//DOMNodeList *elementRoot = xmlDoc->getElementsByTagName(sslContextTag);
DOMNodeList *children = xmlDoc->getElementsByTagName(sslContextTag); //elementRoot->getChildNodes();
const XMLSize_t nodeCount = children->getLength();
XMLCh *keyStore = XMLString::transcode("keyStore");
XMLCh *keyStoreTag = XMLString::transcode("keyStorePassword");
XMLCh *trustStoreTag = XMLString::transcode("trustStorePassword");
for( XMLSize_t xx = 0; xx < nodeCount; ++xx )
{
DOMNode* currentNode = children->item(xx);
if( currentNode->getNodeType() == DOMNode::ELEMENT_NODE )
{
DOMElement* currentElement = dynamic_cast< xercesc::DOMElement* >( currentNode );
if( XMLString::equals(currentElement->getTagName(), sslContextTag) && currentElement->hasAttribute(keyStore))
{
XMLCh *xmlch_pass = XMLString::transcode("password");
currentElement->setAttribute(keyStoreTag , xmlch_pass);
currentElement->setAttribute(trustStoreTag, xmlch_pass);
XMLString::release(&xmlch_pass);
break;
}
}
}
XMLString::release( &sslContextTag );
XMLString::release( &keyStore );
XMLString::release( &keyStoreTag );
XMLString::release( &trustStoreTag );
const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull };
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(gLS);
DOMWriter* theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter();
if (theSerializer->canSetFeature(XMLUni::fgDOMXMLDeclaration,true) )
{
theSerializer->setFeature(XMLUni::fgDOMXMLDeclaration, true);
}
const char *outputXMLName = "test.xml";
XMLFormatTarget *localFormTarget = new LocalFileFormatTarget(outputXMLName);
try{
theSerializer->writeNode(localFormTarget, *xmlDoc);
}
catch(...){
syslog(LOG_ERR,"error");
}
delete localFormTarget;
}
catch( xercesc::XMLException& e )
{
char* message = xercesc::XMLString::transcode( e.getMessage() );
syslog(LOG_ERR, "Error parsing file: %s" , message);
XMLString::release( &message );
}
}
#ifdef MAIN_TEST
/* This main is provided for unit test of the class. */
int main()
{
const char *configFile ="activemq.xml";
XMLReader appConfig;
appConfig.Initialize();
appConfig.readConfigFile(configFile);
return 0;
}
#endif
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。