XsdValidator.h
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:3k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * JBoss, Home of Professional Open Source
  3.  * Copyright 2008, Red Hat, Inc., and others contributors as indicated
  4.  * by the @authors tag. All rights reserved.
  5.  * See the copyright.txt in the distribution for a
  6.  * full listing of individual contributors.
  7.  * This copyrighted material is made available to anyone wishing to use,
  8.  * modify, copy, or redistribute it subject to the terms and conditions
  9.  * of the GNU Lesser General Public License, v. 2.1.
  10.  * This program is distributed in the hope that it will be useful, but WITHOUT A
  11.  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  13.  * You should have received a copy of the GNU Lesser General Public License,
  14.  * v.2.1 along with this distribution; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  16.  * MA  02110-1301, USA.
  17.  */
  18. #ifndef XSDVALIDATOR_H
  19. #define XSDVALIDATOR_H
  20. #include "atmiBrokerCoreMacro.h"
  21. #include "log4cxx/logger.h"
  22. #include "log4cxx/stream.h"
  23. #include <xercesc/util/PlatformUtils.hpp>
  24. #include <xercesc/sax2/SAX2XMLReader.hpp>
  25. #include <xercesc/sax2/XMLReaderFactory.hpp>
  26. #include <xercesc/util/OutOfMemoryException.hpp>
  27. #include <xercesc/sax2/DefaultHandler.hpp>
  28. #include <xercesc/util/XMLUni.hpp>
  29. #if defined(XERCES_NEW_IOSTREAMS)
  30. #include <iostream>
  31. #include <fstream>
  32. #else
  33. #include <iostream.h>
  34. #include <fstream.h>
  35. #endif
  36. XERCES_CPP_NAMESPACE_USE
  37. // ---------------------------------------------------------------------------
  38. // This is a simple class that lets us do easy (though not terribly efficient)
  39. // trancoding of XMLCh data to local code page for display.
  40. // ---------------------------------------------------------------------------
  41. class StrX {
  42. public :
  43. StrX(const XMLCh* const toTranscode)
  44.         {
  45. //Call the private transcoding method
  46.                 fLocalForm = XMLString::transcode(toTranscode);
  47.         }
  48.         ~StrX()
  49.         {
  50.                 XMLString::release(&fLocalForm);
  51.         }
  52. const char* localForm() const
  53. {
  54.      return fLocalForm;
  55. }
  56. private:
  57. char*   fLocalForm;
  58. };
  59. inline std::ostream& operator<< (std::ostream& out, const StrX& toDump)
  60. {
  61. out << toDump.localForm();
  62. return out;
  63. }
  64. class MYHandler : public DefaultHandler {
  65. public:
  66. MYHandler();
  67. ~MYHandler();
  68. bool getSawErrors() const
  69.      {
  70.          return fSawErrors;
  71.      }
  72. void warning(const SAXParseException& exc);
  73. void error(const SAXParseException& exc);
  74. void fatalError(const SAXParseException& exc);
  75. void resetErrors()
  76. {
  77. fSawErrors = false;
  78. }
  79. private:
  80. bool fSawErrors;
  81. };
  82. class BLACKTIE_CORE_DLL XsdValidator {
  83. public:
  84. XsdValidator();
  85. ~XsdValidator();
  86. //Validate XML file with XSD Schema
  87. bool validate(const char* aXSDFileName, const char* aXMLFileName);
  88. //Get logger
  89. static log4cxx::LoggerPtr getLogger()
  90. {
  91. return logger;
  92. }
  93. private:
  94. //Load XSD Schema and build a parser
  95. bool buildXSDParser(const char* aXSDFileName);
  96. //Check File
  97. bool checkFile(const char* fname, const char* suffix);
  98. static log4cxx::LoggerPtr logger;
  99. bool   isInitial;
  100. SAX2XMLReader*  parser;
  101. };
  102. #endif